代碼編譯警告、運行對話框不顯示,根因同 文章 30817:回調函數簽名不符合 BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM) 規範。
BOOL CALLBACK MyDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
DialogBox 第四參數傳函數指針:
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), hWndParent, MyDialogProc);
| 錯誤 | 檢查點 |
|---|---|
| 返回類型 | 必須 BOOL (int),非 void/bool |
| 調用約定 | 必須 CALLBACK (stdcall),非 cdecl |
| 參數類型 | HWND, UINT, WPARAM, LPARAM 精確匹配 |
| 資源 ID | MAKEINTRESOURCE(IDD_XXX) 與 .rc 定義一致 |
| 實例句柄 | hInst 為模塊實例,非 NULL |
BOOL CALLBACK MyDialogProc(HWND hDlg, UINT msg, WPARAM w, LPARAM l) {
OutputDebugStringA("DialogProc entered\n"); // 查看是否進入
switch (msg) {
case WM_INITDIALOG:
SetWindowText(hDlg, "標題"); // 驗證窗口句柄有效
return TRUE;
// ...
}
return FALSE;
}
嚴格遵循 MSDN 規範簽名,對話框即可正常創建、顯示、交互。