Tabs benutzen mit Winapi
-
Hi,
ich hab in meinem childfenster 4 editfenster zeilen in die man text eingeben kann. Jetzt wäre es natürlich schick, wenn man die einzelnen zeilen über drücken der tab-taste anspringen können.
Allerdings find ich dazu nichts, was wirklich gut erklärt wie das mit dem benutzen der Tabulatortaste und dem hin- und her springen der einzelnen felder funktioniert.
hat da jemand einen tipp oder einen guten anhaltspunkt, wo das erklärt wird?
-
?
WS_TABSTOP
Specifies a control that can receive the keyboard focus when the user presses the TAB key. Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style.
You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.
-
IsDialogMessage
-
(D)Evil schrieb:
?
WS_TABSTOP
Specifies a control that can receive the keyboard focus when the user presses the TAB key. Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style.
You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.ja gut, das hatte ich gefunden. allerdings war es damit nicht getan, leider passiert nichts, wenn ich mein childfenster und meine steuerelemente, in diesemfall editfenster, mit WS_TABSTOP versehe.
-
Beachte die Antwort von anhaltspunkt.
-
Hallo Joachim2006!
Hast Du das Problem in Griff bekommen? Wenn ja wie? Ich stehe nämlich vor der selben Frage. Der Hinweis von "anhaltspunkt" ist zwar richtig, aber gilt nur für Dialogfenster.
-
nichtswisser schrieb:
Hallo Joachim2006!
Hast Du das Problem in Griff bekommen? Wenn ja wie? Ich stehe nämlich vor der selben Frage. Der Hinweis von "anhaltspunkt" ist zwar richtig, aber gilt nur für Dialogfenster.Hab zwar versucht das von den Dialogen einfach 1:1 auf mein einfaches Childfenster zu übernehmen, bin bisher aber auch zu keinem ergebnis gekommen.
-
Ich denke hier hilft nur Subclassing, wenn die Steuerelemente (Editfeld, Button) nicht mit einer Ressource erstellt wurden. Ich habe mal mit Spy nachgesehen, sobald mein Button mal gedrückt wurde, und den Focus hat, gehen keine Nachrichten von der Tasttatur mehr an das Parentwindow.
-
nichtswisser schrieb:
Hallo Joachim2006!
Hast Du das Problem in Griff bekommen? Wenn ja wie? Ich stehe nämlich vor der selben Frage. Der Hinweis von "anhaltspunkt" ist zwar richtig, aber gilt nur für Dialogfenster.Nein IsDialogMessage kann auf jedes Parent Window angewendet werden, dass Child Windows hat. Dadurch erreciht man genau das entsprechende Verhalten wie in Dialogen bzgl. der Tastatur.
-
Ok, die Langform:
Ich habe ein Fenster "MAIN", es erzeugt ein sogenanntes Besitzerfenster "OWNER", also ein Child, welches aber nicht im Clientbereich von "MAIN" liegt. In "OWNER" sollen Buttons und Editfelder erscheinen. Da "OWNER" kein Dialog ist, geht es nicht über eine Ressource. In WM_CREATE von "OWNER" erzeuge ich deshalb die Button mit CreateWindow(), alle auch mit dem Style WS_TAB. All das geht, die Fenster erscheinen korrekt, die Button funktionieren wenn man draufklickt, nur wie ich schon sagte, sobald sie den Focus haben, bekommt "OWNER" keine Tastaturinformationen mehr und auch nicht "MAIN", obwohl ich dort (und nur dort) den code angepasst habe.while(GetMessage(&msg,NULL,0,0)) { if(!IsDialogMessage(hwnd,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam;
Wie kann ich es nun anstellen, dass die Tab-Funktion im "OWNER"-Fenster funktioniert?