Welche Voraussetzungen müssen für eine Fenstermeldung erfüllt werden, um gebucht werden?

StackOverflow https://stackoverflow.com/questions/1206506

  •  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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top