[英]Viewing Win32 messages
大家好,我是 windows32 編程的新手,我有幾個問題:
當我在程序中使用以下代碼時,它工作正常-:
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
但是當我將 GetMessage 的 null 替換為 hwnd(剛剛創建的 window 的句柄)時,它似乎並沒有關閉,它仍然在后台運行。 為什么當我用 hwnd 替換 NULL 時會發生這種情況意味着我只收到一個 window 的消息那么為什么它不起作用????
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
順便說一下 windows function 是:
LRESULT CALLBACK WinProc(HWND hWnd, UINT message,
WPARAM wparam, LPARAM lparam){
switch(message){
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wparam, lparam);
}
return 0;
}
第二-:
有什么辦法可以看到發送到任何特定 window 的所有消息????
第三-:
編譯我的 windows 程序時寫 __stdcall(WINAPI) 的原因是什么????
快速回復將不勝感激。謝謝。
GetMessage
僅在收到WM_QUIT
時返回0
(使循環結束),但WM_QUIT
不與任何特定的 window 相關聯,因此如果您的GetMessage
只詢問特定hWnd
的消息,則永遠不會收到它。
如果它是你的 window,你已經在他們的 window 過程中看到他們; 如果你想在將它們分派到它們的 window 過程之前過濾它們,你可以在調用DispatchMessage
之前檢查由GetMessage
填充的msg
結構。
整個 Windows API 使用stdcall
調用約定(我認為是因為它比通常的cdecl
稍快/產生的樣板代碼更少),因此您的回調也必須遵循該調用約定。 請注意,您必須僅在 Windows API 函數調用的函數上使用WINAPI
(即stdcall
),對於其他函數,您可以自由使用您最喜歡的任何調用約定。
PostQuitMessage
生成WM_QUIT
,它由消息隊列處理,但不與特定的 window 關聯。通過在調用GetMessage
時僅過濾hwnd
消息,您不會處理WM_QUIT
。
關於查看發送到 window/線程/進程的所有消息,請參閱https://stackoverflow.com/questions/4038730/i-am-looking-for-a-windows-spy-application
最后,關於__stdcall
,參見What does "WINAPI" in main function mean?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.