2009-07-30 2 views
0

Ich habe erfolgreich registriert eine Fensterklasse RegisterClassEx und erstellt ein Fenster using CreateWindowEx:Welche Bedingungen müssen erfüllt sein, damit eine Fenstermeldung gepostet werden kann?

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 empfängt Nachrichten 36, 129, 131 und 1, und die zurückgegebene HWND ist nicht null. Allerdings, wenn ich rufe später PostMessage (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 aus der MSDN example - Ich wollte einen weiteren Fall hinzufügen, sobald ich bestätigt habe, dass die Nachrichten durchkommen.

Welche Bedingungen müssen erfüllt sein, damit eine Fenstermeldung gepostet werden kann?

Antwort

1

Es gibt keine Bedingungen.

Einige Einschränkungen bestehen bei der Verwendung von Nachrichten [0, WM_USER], aber keine über WM_APP.

Überprüfen Sie den Rückgabecode PostMessage?

Sie sollten wahrscheinlich (zumindest einige) den Code, den Sie zu PostMessage verwenden, sowie den registrierten WndProc veröffentlichen.

Sie müssen auch eine message loop bereitstellen, wenn Sie dies nicht tun. Die meisten Frameworks werden dieses Detail (zumindest etwas) verbergen, aber wenn Sie mit win32 direkt zu tun haben, müssen Sie Ihre eigenen bereitstellen.

+0

Ich habe die Frage als Antwort auf einige Ihrer Bedenken aktualisiert – Simon

+0

Die WndProc ist wahrscheinlich hier wichtig. Ich schätze auch die Nachrichtenschleife, wenn auch nur der Vollständigkeit halber. –

+0

Ich habe einen Link zu dem wndproc-Code hinzugefügt, den ich verwendet habe. Muss ich eine Nachrichtenschleife schreiben? Ich habe bereits die vier Nachrichten erhalten, die ich beschrieben habe, also nahm ich an, dass eine Nachrichtenschleife lief. – Simon

Verwandte Themen