Vermeiden Sie, dass das Fenster den Fokus erhält

8

Ich arbeite an einer virtuellen Tastatur Das Problem ist, wenn ich eine Taste auf der virtuellen Tastatur drücke, verliert das Fenster, in dem die Daten gesendet werden müssen, den Fokus. Wie kann ich das vermeiden?

    
opc0de 14.11.2011, 16:55
quelle

4 Antworten

6

Wenn Ihr Tastaturformular den Fokus erhält, ist ein Teil der Nachricht das Handle des Fensters, das den Fokus verloren hat (wParam). Tun Sie, was Sie tun müssen und setzen Sie den Fokus zurück auf das Fenster, das den Fokus verloren hat.

EDIT: Siehe die Dokumentation auf WM_SETFOCUS

EDIT 2:

Sie können beim Erstellen eines benutzerdefinierten Formulars auch Folgendes verwenden:

%Vor%

Um zu verhindern, dass Ihr Formular aktiviert wird (Fokus von der anderen Form aus). Wie ich bereits in meinem Kommentar erwähnt habe, sollten Sie wahrscheinlich Tasten ohne Fenster verwenden.

    
Jerry Gagnon 14.11.2011, 17:56
quelle
3

Die einzige Methode, die ich gesehen habe, um das zu tun, ist, das Fenster mit der virtuellen Tastatur EnableWindow(hWnd, FALSE) zu deaktivieren.

Nun, wenn das Fenster deaktiviert ist, werden Sie keine Mausnachrichten erhalten, richtig? Sie müssen Optionen:

  • Der einfache: Verwenden Sie WM_SETCURSOR . Es wird sogar an deaktivierte Fenster gesendet, und im übergeordneten Wort von lParam haben Sie die Kennung der ursprünglichen Nachricht (WM_LBUTTONDOWN, usw.). Die Koordinaten des Cursors können mit GetMessagePos() .
  • gelesen werden
  • Der coole: Verwenden Sie einen Windows-Hook: SetWindowsHookEx(WH_MOUSE, ...) . Sie haben die volle Kontrolle über Ihre Mausnachrichten.
rodrigo 14.11.2011 17:12
quelle
1

Verwenden Sie eine Klasse, die nicht in der Lage ist, den Tastaturfokus zu erhalten, sondern nur auf die Mauseingabe reagiert.

Lösung: Leiten Sie Ihre virtuelle Tastatur von TControl oder TGraphicControl und nicht von TWinControl oder TCustomControl ab.

    
NGLN 14.11.2011 18:34
quelle
1

Hilft das?

%Vor%     
Brian Frost 14.11.2011 17:35
quelle

Tags und Links