{"id":124,"date":"2007-10-04T20:59:13","date_gmt":"2007-10-04T18:59:13","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/04\/wie-eine-gruppe-von-radio-buttons-ein-programm-aufhaengen-koennen\/"},"modified":"2008-06-11T14:39:07","modified_gmt":"2008-06-11T12:39:07","slug":"wie-eine-gruppe-von-radio-buttons-ein-programm-aufhaengen-koennen","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/04\/wie-eine-gruppe-von-radio-buttons-ein-programm-aufhaengen-koennen\/","title":{"rendered":"Wie eine Gruppe von Radio-Buttons ein Programm aufh\u00e4ngen k\u00f6nnen"},"content":{"rendered":"<p>Auto-Radiobuttons (<em>BS_AUTORADIO<\/em>) sind als Standard in fast jedem Dialog zu finden. Das diese netten kleinen Buttons ein Programm dazubringen k\u00f6nnen sich aufzuh\u00e4ngen, ohne das unbedingt eigener Code im Spiel ist, kann man sich kaum vorstellen.<br \/>\nAber es kann passieren.<\/p>\n<p>Ein Regular in der Gruppe <a href=\"nntp:\/\/microsoft.public.de.vc\/\">nntp:\/\/microsoft.public.de.vc<\/a>\u00a0berichtete dieses Problem mehrfach in der Gruppe. Letzten Endes trugen aber alle Ideen und Vorschl\u00e4ge zu keiner L\u00f6sung bei.<\/p>\n<p>In einem <a href=\"http:\/\/groups.google.de\/group\/microsoft.public.de.vc\/browse_thread\/thread\/61213fcf618e67a3\">Thread<\/a> wurde dann ein <a href=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2007\/10\/testetabctrlhaenger.zip\">Beispielprogramm<\/a> ver\u00f6ffentlicht, bei dem mit einem simplen Klick auf einen Radiobutton das Programm in einer Endlosschleife ger\u00e4t und sich aufh\u00e4ngt.<\/p>\n<p>Die Ursache ist trivial. Eine Gruppe von Auto-Radio Buttons war nicht durch ein Control mit dem Stil <em>WS_GROUP <\/em>abgeschlossen worden.\u00a0Solch einen Design Fehler im Dialog hat schon jeder mal gemacht und viele werden die folgende Ausgabe im Debug Fenster kennen: <em>&#8222;Warning: skipping non-radio button in group.&#8220;<\/em><\/p>\n<p>In diesem Fall kam nach der Gruppe Radio Buttons ein Tab-Control, dass den Stil <em>WS_EX_CONTROLPARENT<\/em> hat. Dieser Stil erlaubt es Dialoge und Controls zu schachteln. Gleichfalls f\u00fchrt dieser Stil dazu, das versucht wird die Gruppe von Radio-Buttons in den untergeordneten Feldern weiter zu f\u00fchren. Leider waren in den entsprechenden Fenstern auch keine Controls mehr mit dem Stil <em>WS_GROUP <\/em>und irgendwie hat sich die Windows UI-API dann letzten Endes aufgeh\u00e4ngt.<\/p>\n<p>Behoben werden konnte dieser Stil einfach;<\/p>\n<ul>\n<li>Entweder man f\u00fchrt ein (evtl. sogar unsichtbares) Static Control ein, direkt nach der Gruppe. Static-Controls werden automatisch mit dem <em>WS_GROUP <\/em>Stil versehen.<\/li>\n<li>Oder man \u00e4nderte die Z-Order, so dass auf die Radio-Button Gruppe ein anderes Control mit WS_GROUP Eigenschaften folgt.<\/li>\n<li>Oder eines der Controls im Unterdialog hat den <em>WS_GROUP <\/em>Stil, was aber oft genug nicht dem eigentlich gewollten Design entspricht, dass sich die Gruppe in den Unterdialog fortsetzt.<\/li>\n<\/ul>\n<p>Auch so simplen Warnungen in der Debugausgabe wie <em>&#8222;Warning: skipping non-radio button in group.&#8220; <\/em>sollte man gezielt nachgehen. Manchmal haben heftige Probleme trivialste Ursachen \u2757<\/p>\n<p>Anmerkung: Das Beispielprogramm ist zwar noch VC6, aber das Problem liegt im Design der geschachtelten Fenster und der nicht abgeschlossenen Radio-Button Gruppe.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auto-Radiobuttons (BS_AUTORADIO) sind als Standard in fast jedem Dialog zu finden. Das diese netten kleinen Buttons ein Programm dazubringen k\u00f6nnen sich aufzuh\u00e4ngen, ohne das unbedingt eigener Code im Spiel ist, kann man sich kaum vorstellen. Aber es kann passieren. Ein Regular in der Gruppe nntp:\/\/microsoft.public.de.vc\u00a0berichtete dieses Problem mehrfach in der Gruppe. Letzten Endes trugen aber &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/04\/wie-eine-gruppe-von-radio-buttons-ein-programm-aufhaengen-koennen\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWie eine Gruppe von Radio-Buttons ein Programm aufh\u00e4ngen k\u00f6nnen\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-124","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\/124","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=124"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/124\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=124"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}