{"id":57,"date":"2007-05-28T17:57:12","date_gmt":"2007-05-28T15:57:12","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/28\/der-kleine-unterschied-zwischen-cstaticseticon-und-cwndseticon\/"},"modified":"2007-05-28T17:57:12","modified_gmt":"2007-05-28T15:57:12","slug":"der-kleine-unterschied-zwischen-cstaticseticon-und-cwndseticon","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/28\/der-kleine-unterschied-zwischen-cstaticseticon-und-cwndseticon\/","title":{"rendered":"Der kleine Unterschied zwischen CStatic::SetIcon und CWnd::SetIcon"},"content":{"rendered":"<p>So schnell legt man sich rein. Da hat man ein <em>CStatic <\/em>in einem Dialog. Man besorgt sich mit <em>GetDlgItem <\/em>das entsprechende Fenster Objekt und f\u00fchrt <em>SetIcon <\/em>durch. Also etwa so<\/p>\n<p class=\"ccode\">GetDlgItem(IDC_MYSTATIC)-&gt;SetIcon(hIcon);<\/p>\n<p>Ergebnis: \ud83d\ude44 \u00a0Nichts passiert.<\/p>\n<p>Nach etwas Debuggen wird der Fall klar. SetIcon ist nicht virtuell und wie bei allen <em>CWnd <\/em>und anderen Fenstern nichts anderes als eine Abk\u00fcrzung\/Wrapper f\u00fcr ein SendMessage. Mit dem kleinen Unterschied, dass <em>CWnd:SetIcon WM_SETICON <\/em>sendet, w\u00e4hrend <em>CStatic::SetIcon <\/em>ein <em>STM_SETICON <\/em>versendet.<\/p>\n<p><em>GetDlgItem<\/em> liefert aber (solange kein Subclass durchgef\u00fchrt wird) immer einen CWnd-Zeiger. Also wird statt der erwarteten <em>STM_SETICON<\/em> Nachricht eine <em>WM_SETICON<\/em> Nachricht verwendet, die aber <em>CStatic <\/em>nicht interessiert.<br \/>\n<em>SetIcon <\/em>wird nur von Top-Level Fenstern verarbeitet.<\/p>\n<p>BTW: Das Gleiche kann einem auch mit <em>CButton::SetIcon<\/em> passieren. Nein <em>BM_SETICON <\/em>gibt es nicht, aber <em>es <\/em>gibt die Nachricht <em>BM_SETIMAGE<\/em>, und der kann man eine Bitmap (Wrappername <em>CButton::SetBitmap<\/em>) oder eben ein Icon \u00fcbergeben (Wrappername <em>CButton::SetIcon<\/em>). Auch hier lauert die gleiche Falle!<\/p>\n<p>\u2757 Ein typischer Designfehler in einer Library!\u00a0Hier wurde offensichtlich die konsistente Namensgebung in der MFC \u00fcber das Verwechselungsproblem gestellt. In einer abgeleiteten Klasse sollte niemals eine Funktion gleichen Namen mit gleicher Signatur und unterschiedlicher Funktion existieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So schnell legt man sich rein. Da hat man ein CStatic in einem Dialog. Man besorgt sich mit GetDlgItem das entsprechende Fenster Objekt und f\u00fchrt SetIcon durch. Also etwa so GetDlgItem(IDC_MYSTATIC)-&gt;SetIcon(hIcon); Ergebnis: \ud83d\ude44 \u00a0Nichts passiert. Nach etwas Debuggen wird der Fall klar. SetIcon ist nicht virtuell und wie bei allen CWnd und anderen Fenstern nichts &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/28\/der-kleine-unterschied-zwischen-cstaticseticon-und-cwndseticon\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDer kleine Unterschied zwischen CStatic::SetIcon und CWnd::SetIcon\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":[4,3],"tags":[370,352,61],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-mfc","category-programmieren","tag-c","tag-mfc","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\/57","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=57"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}