{"id":438,"date":"2009-03-18T19:17:45","date_gmt":"2009-03-18T18:17:45","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=438"},"modified":"2009-03-26T11:44:13","modified_gmt":"2009-03-26T10:44:13","slug":"lvm_getsubitemrect-mit-lvir_icon-liefert-andere-ergebnisse-unter-vista-als-unter-xp","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2009\/03\/18\/lvm_getsubitemrect-mit-lvir_icon-liefert-andere-ergebnisse-unter-vista-als-unter-xp\/","title":{"rendered":"LVM_GETSUBITEMRECT mit LVIR_ICON liefert andere Ergebnisse unter Vista als unter XP"},"content":{"rendered":"<p>Das damit auch die Funktion <em>CListCtrl::GetSubItemRect <\/em>aus der MFC betroffen ist, ist dann auch \u00a0klar.<br \/>\nManche Sachen \u00e4rgern einen einfach. Vor allem wenn man nichts am Code \u00e4ndert und doch falsches Verhalten erntet.<\/p>\n<p>Wieder mal ist die <em>Vista <\/em>UI eigent\u00fcmlich ungereimt, in diesem Fall bei einem <em>List View<\/em>.<\/p>\n<p>Folgendes ist gegeben:<\/p>\n<ul>\n<li>Ein List View (<em>SysListView32<\/em>) in einem Dialog oder anderen Fenster<\/li>\n<li>Der List View hat den Stil <em>LVS_REPORT<\/em><\/li>\n<li>Der List View hat hat mehr als eine Spalte.<\/li>\n<li>Dem List View wurde eine Imagelist zugewiesen.<\/li>\n<\/ul>\n<p>F\u00fchrt man nun auf Windows <em>XP LVM_GETSUBITEMRECT \/CListCtrl::GetSubItemRect <\/em>mit LVIR_ICON aus, dann erh\u00e4lt man immer ein Rectangle zur\u00fcck mit der entsprechenden Weite der Imagelist Symbole. Das Verhalten ist:<\/p>\n<ul>\n<li>vollkommen unabh\u00e4ngig ob ein Manifest f\u00fcr COMCTL32.DLL Version 6.0 vorhanden ist oder nicht<\/li>\n<li>\u00a0es ist auch unabh\u00e4ngig ob LVS_EX_SUBITEMIMAGES gesetzt ist oder nicht.<\/li>\n<\/ul>\n<p>Macht man das ganze unter Vista, dann liefert <em>LVM_GETSUBITEMRECT \/CListCtrl::GetSubbItemRect <\/em>ein <em>RECT \/ CRect<\/em> mit der Weite der Symbole\u00a0immer dann wenn:<\/p>\n<ul>\n<li>kein Manifest f\u00fcr COMCTL32.DLL Version 6.0 vorhanden ist<\/li>\n<li>oder LVS_EX_SUBITEMIMAGES gesetzt ist<\/li>\n<\/ul>\n<p>Das hei\u00dft in dem Fall<\/p>\n<ul>\n<li>ein Manifest f\u00fcr COMCTL32.DLL Version 6.0 ist<\/li>\n<li><strong>und <\/strong>LVS_EX_SUBITEMIMAGES ist <strong>nicht <\/strong>gesetzt .<\/li>\n<\/ul>\n<p>erh\u00e4lt\u00a0 man ein Rectangle mit der Weite 0 (Null) \ud83d\ude15<\/p>\n<p><strong>Anmerkung:<\/strong><br \/>\n\u00a0Man kann sich nat\u00fcrlich streiten was nun richtig ist. Wenn <em>LVS_EX_SUBITEMIMAGES <\/em>nicht gesetzt ist, dann macht <em>LVIR_ICON <\/em>zugegebenerma\u00dfen wenig Sinn. Aber es leuchtet irgendwie nicht ein, dass ohne Manifest <strong>und<\/strong> ohne <em>LVS_EX_SUBITEMIMAGES<\/em>, wieder ein Wert zur\u00fcckgeliefert wird. Entweder ist die Weite von <em>LVS_EX_SUBITEMIMAGES <\/em>abh\u00e4ngig oder eben nicht<em>.<br \/>\n<\/em>Das Ganze ist in jedem Falle mal ungereimt und nicht kompatibel \u2757<\/p>\n<p><strong>Nachtrag 26.03.2009:<br \/>\n<\/strong>Das List-Control liefert f\u00fcr das Subitem 0 immer ein korrektes Rectangle f\u00fcr <em>LVIR_ICON<\/em>! Nur wenn wirklich ein Subitem (&gt;0) abgefragt wird, tritt das Problem auf.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das damit auch die Funktion CListCtrl::GetSubItemRect aus der MFC betroffen ist, ist dann auch \u00a0klar. Manche Sachen \u00e4rgern einen einfach. Vor allem wenn man nichts am Code \u00e4ndert und doch falsches Verhalten erntet. Wieder mal ist die Vista UI eigent\u00fcmlich ungereimt, in diesem Fall bei einem List View. Folgendes ist gegeben: Ein List View (SysListView32) &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2009\/03\/18\/lvm_getsubitemrect-mit-lvir_icon-liefert-andere-ergebnisse-unter-vista-als-unter-xp\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eLVM_GETSUBITEMRECT mit LVIR_ICON liefert andere Ergebnisse unter Vista als unter XP\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,17,2],"tags":[99,168,136,358,59,61],"class_list":["post-438","post","type-post","status-publish","format-standard","hentry","category-programmieren","category-vista-2","category-windows-api","tag-bug","tag-kompatibiltaet","tag-qualitaetssicherung","tag-vista","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\/438","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=438"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/438\/revisions"}],"predecessor-version":[{"id":439,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/438\/revisions\/439"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=438"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}