{"id":798,"date":"2011-05-18T21:21:50","date_gmt":"2011-05-18T19:21:50","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=798"},"modified":"2011-05-19T08:20:02","modified_gmt":"2011-05-19T06:20:02","slug":"was-macht-man-eigentlich-gegen-unerwunschte-ubersetzung-von-acceleratoren","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2011\/05\/18\/was-macht-man-eigentlich-gegen-unerwunschte-ubersetzung-von-acceleratoren\/","title":{"rendered":"Was macht man eigentlich gegen unerw\u00fcnschte \u00dcbersetzung von Acceleratoren?"},"content":{"rendered":"<p>Accelerator sind ein einfach gutes Hilfsmittel um Funktionen in einem Programm \u00fcber die Tastatur verf\u00fcgbar zu machen.<br \/>\nBehandelt werden Accelerator in <em>CFrameWnd::PreTranslateMessage<\/em>. D.h. bevor eine Eingabe-Nachricht aus der Message Queue an ein Fenster ausgeliefert wird, bekommt das Fenster selbst und jedes Parent des Fensters die Nachricht zur Behandlung in <em>PreTranslateMessage<\/em> angeboten.<\/p>\n<p>Aber das kann auch zu einem kleinen Problem werden. Nehmen wir an, wir haben eine Datenbank Anwendung und Bild-Hoch\/Runter werden \u00fcber Accelerator f\u00fcr das Bl\u00e4ttern in den Datens\u00e4tzen definiert. Soweit OK.<\/p>\n<p>Was aber wenn man nun ein Inplace Control hat, oder eine kleine dynamische Listbox, die man einblendet und in der man nun auch bl\u00e4ttern will? Dann wird der Accelerator im <em>CFrameWnd<\/em> zum Tastenschlucker und in dem Moment f\u00fchren Bild-Hoch\/Runter nicht zu dem gew\u00fcnschten Bl\u00e4ttern im Popupfenster.<\/p>\n<p>Wie geht man nun vor?<br \/>\nWenn man im View nun in <em>PreTranslateMessage FALSE<\/em> zur\u00fcckgibt frisst der Accelerator im <em>CFrameWnd<\/em> die Taste. Gibt man <em>TRUE<\/em> zur\u00fcck, dann wird die Nachricht nicht ausgeliefert. Der Trick ist eigentlich ganz simpel. Wenn alle <em>PreTranslateMessage<\/em> Funktionen <em>FALSE<\/em> zur\u00fcckgeben wird die Nachricht ausgeliefert indem die beiden Funktionen <em>TranslateMessage<\/em> und\u00a0<em>DispatchMessage <\/em>aufgrufen werden.<br \/>\nDas Ganze kann man abk\u00fcrzen. Im <em>PreTranslateMessage<\/em> Handler des Fensters selbst \u00a0kann man nun einfach <em>TranslateMessage<\/em> und <em>DispatchMessage<\/em> aufrufen und nun <em>TRUE<\/em> zur\u00fcckgeben. Das Fenster selbst oder evtl. sein Parent sorgt daf\u00fcr, dass es die gew\u00fcnschte Nachricht bekommt wie man es erwartet und der Accelerator im <em>CFrameWnd<\/em> wird umgangen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Accelerator sind ein einfach gutes Hilfsmittel um Funktionen in einem Programm \u00fcber die Tastatur verf\u00fcgbar zu machen. Behandelt werden Accelerator in CFrameWnd::PreTranslateMessage. D.h. bevor eine Eingabe-Nachricht aus der Message Queue an ein Fenster ausgeliefert wird, bekommt das Fenster selbst und jedes Parent des Fensters die Nachricht zur Behandlung in PreTranslateMessage angeboten. Aber das kann auch &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2011\/05\/18\/was-macht-man-eigentlich-gegen-unerwunschte-ubersetzung-von-acceleratoren\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWas macht man eigentlich gegen unerw\u00fcnschte \u00dcbersetzung von Acceleratoren?\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,4,3],"tags":[370,352,45],"class_list":["post-798","post","type-post","status-publish","format-standard","hentry","category-c","category-mfc","category-programmieren","tag-c","tag-mfc","tag-tastatur"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/798","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=798"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/798\/revisions"}],"predecessor-version":[{"id":853,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/798\/revisions\/853"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=798"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}