Welche Voraussetzungen müssen für eine Fenstermeldung erfüllt werden, um gebucht werden?
-
05-07-2019 - |
Frage
Ich habe erfolgreich registriert eine Fensterklasse mit RegisterClassEx
und erstellt ein Fenster mit CreateWindowEx
:
m_hInstance = ::GetModuleHandle(NULL);
...
m_hWnd = ::CreateWindowEx(0, "CMyClassName", "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);
Die zugeordnete Fensterprozedur empfangen Nachrichten 36, 129, 131 und 1, und die zurückgegebene HWND
ist nicht null. Allerdings, wenn ich später PostMessage
anrufen (von einem anderen Thread):
bool bPosted = ::PostMessage(m_hWnd, WM_APP + 3, 0, 0);
obwohl bPosted wahr ist, wird die Fensterprozedur nicht aufgerufen. Ich versuche, herauszufinden, warum das so sein sollte. Die Fensterprozedur ist die von der MSDN Beispiel - ich würde intented einen anderen Fall hinzufügen, sobald ich die Nachrichten bestätigt hatte durch waren immer
.Welche Bedingungen erfüllt sein müssen für eine Fenstermeldung gebucht werden?
Lösung
Es gibt keine Bedingungen.
Einige Einschränkungen existieren, wenn Nachrichten mit [0, WM_USER), aber keine über WM_APP.
Überprüfen Sie den Rückgabecode von Postmessage ?
Sie sollten wahrscheinlich schreiben (zumindest einige), um den Code, den Sie Postmessage verwenden, sowie die registrierte WndProc.
Sie haben auch eine Nachrichtenschleife , wenn Sie nicht tun, so. Die meisten Frameworks wird dieses Detail verstecken (zumindest etwas), aber wenn man mit win32 es zu tun direkt müssen Sie Ihre eigene liefern.