Hallo, normalerweise erstelle ich meine Programme mit C++ und dem .net framework. Zur Abwechslung sollte es für eine kleine Anwendung diesmal C und winapi sein. Drei Button und ein Editfeld hab ich schon. Jetzt finde ich nichts darüber, wie man mit der Tabtaste vom einem zum nächsten Steuerelement springen kann. Kann mir jemand helfen?
>Jetzt finde ich nichts darüber, wie man mit der Tabtaste vom einem zum >nächsten Steuerelement springen kann. Ich glaube, das geschieht automatisch... Probiers mal aus. So wie ich das noch im Kopf habe, geht der von sich aus ins nächste Feld und die "Erkennung", welches Feld es ist, läuft dann am Ende der Eingabe über den Callback-Handler des jeweiligen Feldes.
Das geht leider nicht automatisch. Sind die Steuerelemente überhaupt untereinanander verbunden, bei der winapi?
> Drei Button und ein Editfeld hab ich schon. > Jetzt finde ich nichts darüber, wie man mit der Tabtaste > vom einem zum nächsten Steuerelement springen kann. Hast du sie in einem Dialogklassenfenster (DialogBox, CreateDialog, DlgProc, WC_DIALOG, #32770) angelegt (dort wird die TAB-Taste über die DefDlgProc Messages WM_NEXTDLGCTL bzw. Funktion GetNextDlgTabItem gehandelt) oder hast du ein normales Fenster (CreateWindow) angelegt und deine Buttons als Childs mit CreateWindow(...hWndMain...) eingebunden, dann hast du kein TAB Handling. Da du Standard-Windows-Controls verwendest, solltest du dann auf einen TAB-Tastendruck Event selbst herausfinden, welches dein nächstes Feld ist, oder mal ausprobieren, ob deine Anordnung so ist, daß DefDlgProc sie unter deinen Bedingungen umsetzen kann.
Man kann auch bei normalen Fenstern mit Tabs zwischen den Kontrollelementen navigieren. Dazu muss WS_TABSTOP als Windowstyle mit angegeben werden, wenn man die Elemente erzeugt. Außerdem müssen die Nachrichten in der Hauptschleife durch IsDialogMessage() anstatt TranslateMessage() und DispatchMessage() ausgewertet werden. MfG Mark
Ja, es ist ein ganz normales Fenster und die Elemente sind auch mit CreateWindow angelegt. Das heißt man muss das Springen mit der TabTaste von Hand erledigen?
WS_TABSTOP & IsDialogMessage() funktioniert, Mark. Das Fenster sieht jetzt so aus: BUTTON1 TEXTEDIT BUTTON2 BUTTON3 Und der Focus springt von Button1 zum TextEdit zum Button2 zum TextEdit zu Button3. Wie kann man die Reihenfolge festlegen?
Holger74 schrieb: > Wie kann man die Reihenfolge festlegen? z.B. durch die Reichenfolge der Erstellung - dann ist aber (wenn Du es nicht ausschließt) das letzte Steuerelement das erste. Auch "SetWindowPos" - man beachte "Z order" (ist aber bei .NET auch so)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.