Bei Tastendruck im Edit-Ctrl Fokus wechseln



  • Hi,

    beim Druck von "Return" in einem Edit-Feld eines Dialogs soll der Fokus auf einen bestimmten Button gesetzt werden. Ist nicht so einfach irgendwie.

    Ich hab das Edit-Feld gesubclasst, gebe bei (msg==WM_KEYDOWN && wpar==VK_RETURN) einfach 0 zurück (damit die Nachricht nicht von der Default-Proc gehandlt wird). Bei (msg==WM_KEYUP && wpar==VK_RETURN) wollte ich naiv SetFocus(...) mit anschließendem return 0 aufrufen, klappt aber nur halbwegs: Der Ziel-Fokus-Button bekommt dieses Caret-Rechteck, "Tab" bzw "Umschalt+Tab" springt richtigerweise auch ab dem Button, ohne weitere Interaktion lässt sich der Button aber nur mit "Space", nicht aber mit "Enter" betätigen; der kleine schwarze Rahmen um den Button fehlt auch. Wechsele ich als User kurz das Top-Window und zurück (z.B. mit "Alt+Tab"), ist der Button wie er sein sollte (Caret + schwarzer Rahmen + reagiert auf "Return"). Erklären tut das halbwegs die MSDN.

    Als nächstes hab ich versucht, bei WM_KEYUP&&VK_RETURN an das this-Editfeld WM_KILLFOCUS zu senden, die Nachricht default-behandeln zu lassen und anschließend SetFocus oder auch WM_SETFOCUS mit dem Button als Ziel aufzurufen. Alles erfolglos, Ergebnis wie oben beschrieben (obwohl manchmal, nichtdeterministisch, nichtmal das Caret um den Button gezeichnet wird).

    Irgendwelche Ideen, Erfahrungen oder Vorschläge?

    Grüße,
    Badestrand




Anmelden zum Antworten