Ich möchte die Funktionalität einer Anwendung von Drittanbietern erweitern, die Tastenkombinationen für die Verwendung auf einem Touchscreen-Monitor verwendet. Mein Plan, um dies zu erreichen, war, eine Bildschirmtastatur zu machen, um Tastenanschläge (virtuell) zur Anwendung zu führen und den Fensterstil zu ändern, um es in die Tastatur einzubetten.MFC C++ auf der Bildschirmtastatur als übergeordnetes Dialogfeld
Da die Applikation (Mach3) die Erweiterung der Funktionalität um Plugins unterstützt, wollte ich so mein Ziel erreichen.
Für die Einbettung habe ich den Code von here so geändert, dass beim Laden von mach3 der Anwendungsdialog sofort in meinen Dialog eingebettet wird.
Für die Tastaturfunktionalität habe ich Code von here verwendet, um dem Fenster den WS_EX_NOACTIVATE
Stil und den Griff zu geben, der richtig verschoben wird.
Das Problem, das ich habe, ist, dass, wenn ich Fokus auf ein anderes Fenster (zum Beispiel Notepad) geben und eine Taste drücken, um einen Tastendruck zu erzeugen, der Tastendruck wird korrekt von der anderen Anwendung empfangen, aber wenn ich den Fokus auf die Eingebettetes Fenster und eine Taste drücken, der Fokus wird auf die Schaltfläche verschoben und kein Tastendruck wird vom untergeordneten Dialog empfangen.
Wie verhindere ich, dass der Fokus so geändert wird? Ist das eine einfache Sache, die ich vermisse oder muss ich meinen Ansatz drastisch ändern?
Ich würde etwas Code posten, aber es gibt ziemlich viel davon und ich bin nicht sicher, welche Bits das relevanteste sein würden, um dieses Problem zu lösen.
http://stackoverflow.com/questions/1372202/let-my-mfc-dialog-receive-keystroke-events-before-its-controls-mfc-win32-equiva –
das scheint anders zu sein, ich don ' Ich möchte, dass mein dialog den keypressed schluckt, ich möchte, dass sie an das applikationsfenster übergeben werden, und damit der fokus nicht geändert wird, denke ich, dass der fokus hier das große thema ist. –
Ich denke Ihr Problem ist, dass, da die eingebettete Anwendung in Ihrem Dialog ist, der auch die virtuelle Tastatur enthält, der Code, der den Fokus zurück auf das vorherige Fenster überträgt (in OnMouseMove), wahrscheinlich nur den Fokus auf Ihren eigenen Dialog und auf die virtuelle Tastaturschaltfläche überträgt . Ich denke, dass dies einige Tests erfordert. Übrigens sehe ich im Kommentarbereich des MFC-Artikels, dass es eine Korrektur für das Projekt gibt, hast du es versucht? –