{"id":166,"date":"2008-07-04T19:50:22","date_gmt":"2008-07-04T17:50:22","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=166"},"modified":"2008-06-28T19:01:07","modified_gmt":"2008-06-28T17:01:07","slug":"mfc-fenster-in-anderen-applikationen-verwenden","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/07\/04\/mfc-fenster-in-anderen-applikationen-verwenden\/","title":{"rendered":"MFC Fenster in anderen Applikationen verwenden&#8230;"},"content":{"rendered":"<p>Manch ein Programmierer kommt auf die Idee und entwickelt ein Plugin mit der MFC f\u00fcr ein anderes Programm. Dass Plugin oder die entsprechende Funktionalit\u00e4t soll alleine in einer Standard-DLL leben. Die Schnittstelle wird bewusst schmal und einfach gehalten. Manche dieser kleinen Tools m\u00fcssen\/wollen nun auch ein Fenster nicht modal anzeigen.<br \/>\nKein Problem, einfach <em>CWnd::Create<\/em>, oder <em>CDialog::CreateIndirect <\/em>und schon hat man sein Fenster.<\/p>\n<p>Eines muss an dieser Stelle klar sein \u2757<br \/>\nMan verl\u00e4sst sich in einem solchen Fall, dass die hostende Anwendung eine Messageloop bereitstellt. Andernfalls bekommt das Fenster keine Nachrichten. OK!<\/p>\n<p>Was einem aber auch klar sein muss in diesem Fall \u2757<br \/>\nMan kann <em>PreTranslateMessage <\/em>nicht mehr verwenden. Das w\u00fcrde nur gehen, wenn man eine Extension DLL hat, oder die hostende Anwendung als auch die DLL beide die <em>MFC<\/em> als Shared DLL in derselben Version verwenden.<br \/>\nDamit ist nun auch verbunden, dass evtl. Tooltips in diesem Fenster ein sehr eigenwilliges Leben f\u00fchren werden.<\/p>\n<p>Es gibt einfach keinen vern\u00fcnftigen Weg sich in die Messageloop eines Hosts auf einfache und vern\u00fcnftige Art einzuklinken.<br \/>\nEin Ansatz an dieser Stelle w\u00e4re sicherlich ein entsprechender <em>WH_GETMESSAGE <\/em>Hook. Denkbar w\u00e4re dann die entsprechende Nachricht abzufangen und an die eigenen Fenster via <em>PreTranslateMessage <\/em>anzubieten, sofern eben die eigenen Fenster den Focus haben oder die Nachricht f\u00fcr eines dieser eigenen Fenster oder Kindfenster bestimmt sind. Eben genauso wie es die MFC in seiner Messageloop macht. Dieses Verfahren wird auch f\u00fcr ActiveX Controls in der MSDN im <a href=\"http:\/\/support.microsoft.com\/kb\/194294\/en-us \">KB Artikel 194292<\/a> empfohlen.<\/p>\n<p>Siehe auch <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/08\/18\/wann-message-reflection-nicht-funktioniert\/\">Wann Message Reflection nicht funktioniert!<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manch ein Programmierer kommt auf die Idee und entwickelt ein Plugin mit der MFC f\u00fcr ein anderes Programm. Dass Plugin oder die entsprechende Funktionalit\u00e4t soll alleine in einer Standard-DLL leben. Die Schnittstelle wird bewusst schmal und einfach gehalten. Manche dieser kleinen Tools m\u00fcssen\/wollen nun auch ein Fenster nicht modal anzeigen. Kein Problem, einfach CWnd::Create, oder &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/07\/04\/mfc-fenster-in-anderen-applikationen-verwenden\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eMFC Fenster in anderen Applikationen verwenden&#8230;\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,4,3,2],"tags":[73,352],"class_list":["post-166","post","type-post","status-publish","format-standard","hentry","category-c","category-mfc","category-programmieren","category-windows-api","tag-command-routing","tag-mfc"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=166"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/166\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=166"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}