<span style="font-size:18px;">#include <windows.h>
#include "resource.h"
BOOL CALLBACK Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)MAKEINTRESOURCE(IDI_ICON));
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)MAKEINTRESOURCE(IDI_ICON));
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hWnd, TRUE);
break;
}
break;
}
return FALSE;
}
int WINAPI wWinMain(HINSTANCE hInstexe, HINSTANCE, PTSTR nCmdLine, int)
{
DialogBox(hInstexe, MAKEINTRESOURCE(IDD_DIALOG), NULL, Dlg_Proc);
return 0;
}</span>
自己就簡單寫了個對話框,但是一運行結果出來是這樣:
排版都亂掉了,百思不得其解,就是寫了個簡單的對話框,怎麼還寫錯了?後來經過和正確的代碼進行對比,終於發現錯誤原因在於對話框回調函數的最後返回值,應該寫成return FALSE;而不是return TRUE;我之前一直以爲這就是個返回值,沒什麼太大影響,沒想到這麼小一個地方導致了這麼大的錯誤。《Windows程序設計》裏面只有這麼一句話,就是如果對話框過程處理一條消息時,它會返回TRUE;當不處理消息的時候,會返回FALSE。也就是如果再switch裏面處理了消息,那就在相應的地方return掉,如果都沒有處理,程序就會走到函數的末尾,這時候返回FALSE。
我看到如果這樣寫錯,CPU會跑滿,一直卡在那裏,然後發現返回的消息的值很小,小於我們需要處理的消息,也就是返回的根本不是我們自己編程需要的消息。具體爲什麼會卡死,現在還沒有答案,我決定請教下別人,先在這裏記錄一下這個問題。