首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Win32 DialogBox 回調函數參數錯誤修正:同 30817 簽名規範

     編輯:程式設計綜合問答

問題重述

代碼編譯警告、運行對話框不顯示,根因同 文章 30817:回調函數簽名不符合 BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM) 規範。

修正步驟

  1. 聲明回調函數:
    
    BOOL CALLBACK MyDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
  2. 實現函數體(參考 30817 完整示例)
  3. DialogBox 第四參數傳函數指針:
    
    DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), hWndParent, MyDialogProc);
    

常見錯誤自查表

錯誤檢查點
返回類型必須 BOOL (int),非 void/bool
調用約定必須 CALLBACK (stdcall),非 cdecl
參數類型HWND, UINT, WPARAM, LPARAM 精確匹配
資源 IDMAKEINTRESOURCE(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 規範簽名,對話框即可正常創建、顯示、交互。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved