C++ Qt/WinApi: Wie funktionieren Events/Messages?

SvenF311

doesn't like
ID: 151941
L
24 April 2006
307
61
Hallo,

der Titel ist leider etwas daneben, aber mir ist gerad' nichts besseres eingefallen :-?.

Folgende Problemstellung, ich habe mir das Window-Handle vom Windows 7 Solitär geschnappt und mit SetParent() einem QWidget untergeschoben. Leider geht dabei der komplette User-Input flöten und Solitär lässt sich überhaupt nicht mehr bedienen. (Mit dem Windows XP Solitär geht das problemlos.)

Da ich leider von der WinApi nicht so wirklich einen Plan habe, zerbreche ich mir schon seit Stunden erfolglos den Kopf darüber. Aktueller Stand wäre jetzt die WM_PARENTNOTIFY, WM_SETCURSOR etc. Events in der winEvent-Methode des QWidget-Parents auszuwerten und jeweils entsprechende PostMessage-Befehle an das Solitär-Handle abzuschicken. Das erscheint mir aber saumäßig viel Arbeit für ein ungewisses Ergebnis zu sein. Zumal die WinApi Doku der MSDN nicht gerade übersichtlich ist.

Im Prinzip hänge ich ja in der WindowProc-Funktion eines WinApi Parent-Windows, da muss es doch eine einfache Möglichkeit geben, die User-Inputs (automatisch?) auf ein WinApi Child-Window umzumappen. Ideen?

MfG
Sven
 
Moin,

die Chance, dass ich was Hilfreiches beitragen kann, is extrem gering, da ich mit Qt null Ahnung hab, aber vielleicht bringt dich folgender Denkanstoß trotzdem weiter:

Kannst du nicht die WindowProc des "geklauten" Solitär-Fensters auf deine eigene abändern? Dann hast du die Nachrichten ja und kannst sie weiterverarbeiten.
Ändern der WindowProc geht mit SetWindowLong() bzw. - wie ich dem Manual grade entnehme - neuerdings mit SetWindowLongPtr().
 
Moin,

die Chance, dass ich was Hilfreiches beitragen kann, is extrem gering, da ich mit Qt null Ahnung hab, aber vielleicht bringt dich folgender Denkanstoß trotzdem weiter:

Kannst du nicht die WindowProc des "geklauten" Solitär-Fensters auf deine eigene abändern? Dann hast du die Nachrichten ja und kannst sie weiterverarbeiten.
Ändern der WindowProc geht mit SetWindowLong() bzw. - wie ich dem Manual grade entnehme - neuerdings mit SetWindowLongPtr().
Danke für den Tipp, dass sich die WinProc ändern lässt war mir bisher entgangen.

Aber leider funktioniert das alles nicht so, wie ich mir das vorgestellt habe. Offenbar ist es nicht gut, wenn Parent und Child in unterschiedlichen Threads leben, von unterschiedlichen Prozessen ganz zu schweigen. Schnappe ich mr das Solitär-Fenster, solange es noch aufgebaut wird, klappt es gelegentlich. Warte ich bis das Spiel vollständig geladen ist, geht es nicht mehr. Hmm, da muss ich mir etwas anderes überlegen ... :-?
 
  • Like
Reaktionen: TDS