{"id":423,"date":"2009-03-01T14:02:58","date_gmt":"2009-03-01T13:02:58","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=423"},"modified":"2009-02-28T19:30:32","modified_gmt":"2009-02-28T18:30:32","slug":"tooltips-und-customdraw","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2009\/03\/01\/tooltips-und-customdraw\/","title":{"rendered":"Tooltips und Customdraw"},"content":{"rendered":"<p>Customdraw ist f\u00fcr mich erste Wahl, wenn es um das Anpassen von Ausgaben in Controls geht, zudem ein subclassing von <em>WM_PAINT <\/em>mit Erhalt der Grundfunktionen eigentlich nicht m\u00f6glich ist (ich werde dazu demn\u00e4chst noch mal schreiben).<\/p>\n<p>Liest man die Anleitung zu <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb760264(VS.85).aspx\">NM_CUSTOMDRAW und Tooltips<\/a>, bekommt man den Eindruck, dass man wie bei einem List Control an jeder Stelle eingreifen kann. Vor dem Zeichnen, nach L\u00f6schen des Hintergrundes und so weiter: <em>CDRF_NOTIFYITEMDRAW<\/em>, <em>CDRF_NOTIFYPOSTERASE<\/em>, <em>CDRF_NOTIFYPOSTPAINT<\/em>, <em>CDRF_NOTIFYSUBITEMDRAW <\/em>werden in der Doku erw\u00e4hnt.<\/p>\n<p>Diese Informationen sind komplett irref\u00fchrend, denn nur <em>CDRF_NOTIFYPOSTPAINT <\/em>wird vom Tooltip akzeptiert und beachtet. Man kann z.B. nicht auf die Ausgabe des Textes alleine \u00fcbernehmen und nur das L\u00f6schen des Hintergrundes dem Control \u00fcberlassen. Es wird wirklich nur <em>CDRF_NOTIFYPOSTPAINT <\/em>ber\u00fccksichtigt ( ich habe mich durch den Assembler-Code der COMCTL32.DLL durch gedebuggt).<br \/>\nAuch die R\u00fcckgabe von <em>CDRF_NEWFONT<\/em> kann man sich sparen. Man muss nur einen neuen Font selektieren und er wird ber\u00fccksichtigt.<\/p>\n<p>Was in der Dokumentation auch zu kurz kommt, ist, dass <em>NM_CUSTOMDRAW <\/em>mit <em>CDDS_PREPAINT <\/em>zweimal kurz hintereinander aufgerufen wird. Beim ersten Mal ist <em>DT_CALCRECT <\/em>in <em>NMTTCUSTOMDRAW::uDrawFlags<\/em> gesetzt ist und beim zweiten mal nicht mehr. Man hat dadurch die M\u00f6glichkeit die Gr\u00f6\u00dfe des Controls mit <em>NMCUSTOMDRAW::rc <\/em>zu kontrollieren. Gut beschrieben ist das nicht in der MSDN sondern in einem alten <a href=\"http:\/\/www.microsoft.com\/msj\/archive\/S5D3.aspx\">Artikel des MSJ aus dem Otkober 1996<\/a>, wer wei\u00df wann der verschwinden wird.<\/p>\n<p>Die Implementierung hier ist einfach halbherzig, leider. Die M\u00f6glichkeiten w\u00e4ren so genial, hier ein bisschen Fettgedrucktes, dort noch mal ein Icon&#8230; Schade&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Customdraw ist f\u00fcr mich erste Wahl, wenn es um das Anpassen von Ausgaben in Controls geht, zudem ein subclassing von WM_PAINT mit Erhalt der Grundfunktionen eigentlich nicht m\u00f6glich ist (ich werde dazu demn\u00e4chst noch mal schreiben). Liest man die Anleitung zu NM_CUSTOMDRAW und Tooltips, bekommt man den Eindruck, dass man wie bei einem List Control &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2009\/03\/01\/tooltips-und-customdraw\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eTooltips und Customdraw\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,3,2],"tags":[55,167,59,61],"class_list":["post-423","post","type-post","status-publish","format-standard","hentry","category-c","category-programmieren","category-windows-api","tag-msdn","tag-tooltips","tag-win32","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\/423","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=423"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/423\/revisions"}],"predecessor-version":[{"id":432,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/423\/revisions\/432"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}