{"id":141,"date":"2007-10-19T14:40:26","date_gmt":"2007-10-19T12:40:26","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/19\/warum-eigentlich-callwindowproc-aufrufen-wenn-man-einen-zeiger-auf-die-alte-wndproc-hat\/"},"modified":"2007-10-19T14:27:31","modified_gmt":"2007-10-19T12:27:31","slug":"warum-eigentlich-callwindowproc-aufrufen-wenn-man-einen-zeiger-auf-die-alte-wndproc-hat","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/19\/warum-eigentlich-callwindowproc-aufrufen-wenn-man-einen-zeiger-auf-die-alte-wndproc-hat\/","title":{"rendered":"Warum eigentlich CallWindowProc aufrufen, wenn man einen Zeiger auf die alte WndProc hat?"},"content":{"rendered":"<p>Wenn man mit <em>GetWindowLong(Ptr) <\/em>und GWL_WNDPROC die Adresse einer\u00a0Fenster Prozedur ermittelt hat, warum muss man eigentlich <em>CallWindowProc <\/em>aufrufen und nutzt nicht direkt den Zeiger? Geht das denn \u00fcberhaupt? \ud83d\ude15<\/p>\n<p>\u2757 <strong>Nein es\u00a0geht nicht und man sollte es gar nicht versuchen \u2757<\/strong><\/p>\n<p>In Win16 ging das noch. Aber das was durch <em>GWL_WNDPROC <\/em>geliefert wird ist seit Einf\u00fchrung von Win32 nicht unbedingt ein Funktionszeiger mehr.\u00a0 Oft ist es eine Struktur.<br \/>\nWarum? Das ganze wurde gemacht um Unicode Kompatibilit\u00e4t zu erreichen.<br \/>\nFenster sind nicht nur Thread afin, nein, sie sind auch Unicode bzw. MBCS afin (wenn man das so sagen kann). Je nachdem ob es eben mit <em>CreateWindow(Ex)A <\/em>oder <em>CreateWindow(Ex)W <\/em>erzeugt wurde.<\/p>\n<p>Wenn also ein Unicode Fenster von einer Nicht-Unicode Fenster-Prozedur gesubclassed wird (oder umgekehrt), dann muss hier eine Konvertierung stattfinden. Seit dem wir Themed Style mit XP bekommen haben, tritt dies \u00fcbrigens h\u00e4ufig auf. Denn die Fenster im XP-Stil werden meistens intern als Unicode Fenster verwaltet oder angelegt.<br \/>\nF\u00fcr diese Konvertierungsarbeit wird eine Struktur angelegt und diese Struktur wird dann in <em>GWL_WNDPROC <\/em>eingetragen. Dann haben wir eben keinen Funktionszeiger mehr, sondern eher ein Handle. Und nur <em>CallWindowProc <\/em>wei\u00df wie man eben damit umzugehen hat&#8230;<\/p>\n<p>Details hier in dem Artikel <a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/ms997565.aspx\">Safe Subclassing in Win32<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man mit GetWindowLong(Ptr) und GWL_WNDPROC die Adresse einer\u00a0Fenster Prozedur ermittelt hat, warum muss man eigentlich CallWindowProc aufrufen und nutzt nicht direkt den Zeiger? Geht das denn \u00fcberhaupt? \ud83d\ude15 \u2757 Nein es\u00a0geht nicht und man sollte es gar nicht versuchen \u2757 In Win16 ging das noch. Aber das was durch GWL_WNDPROC geliefert wird ist seit &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/19\/warum-eigentlich-callwindowproc-aufrufen-wenn-man-einen-zeiger-auf-die-alte-wndproc-hat\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWarum eigentlich CallWindowProc aufrufen, wenn man einen Zeiger auf die alte WndProc hat?\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":[3,2],"tags":[370,61],"class_list":["post-141","post","type-post","status-publish","format-standard","hentry","category-programmieren","category-windows-api","tag-c","tag-winapi"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/141","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=141"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/141\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}