2013-05-09 129 views
-2

我正在運行以下命令以在Windows中創建一個對話框。當我運行它,我得到了follwoing錯誤:在窗口中創建對話框

    Error 1 error C2065: 'IDD_DLGFIRST' : undeclared identifier 

下面是代碼:

    HWND hWnd; 
       LRESULT CALLBACK DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 

      INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
       LPSTR lpCmdLine, int nCmdShow) 
    { 
        DialogBox(hInstance, MAKEINTRESOURCE(IDD_DLGFIRST), 
        hWnd, reinterpret_cast<DLGPROC>(DlgProc)); 

       return FALSE; 
       } 

     LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam) 
      { 
      switch(Msg) 
      { 
       case WM_INITDIALOG: 
           return TRUE; 

       case WM_COMMAND: 
       switch(wParam) 
      { 
       case IDOK: 
         EndDialog(hWndDlg, 0); 
        return TRUE; 
      } 
       break; 
       } 

       return FALSE; 
    } 

// ------------------- -------------------------------------------------- ------

我知道有資源文件,但我還沒有很好地理解。 有人可以幫我解決這個錯誤,請。

回答

3

您需要在資源文件中以及調用MAKEINTRESOURCE的文件中定義符號。通常它是通過一個共同的頭文件完成的,這兩個文件在兩個地方都是#include(例如resource.rc和main.cpp中的#include resource.h)。

而在resource.h中,例如你可以放#define IDD_DLGFIRST 1。只要確保該數字在各個資源上都是唯一的。

編輯:

作爲一個例子:

RESOURCE.H

#define IDD_DLGFIRST 1001 
#define IDC_STATIC 1002 

yourapp.rc

#include <windows.h> 
#include "resource.h" 

IDD_DLGFIRST DIALOGEX 0, 0, 170, 62 
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
CAPTION "My dialog" 
FONT 8, "MS Shell Dlg" 
BEGIN 
    LTEXT   "My first dialog box, Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX 
    DEFPUSHBUTTON "OK",IDOK,113,41,50,14,WS_GROUP 
END 

yourapp.cpp

#include <windows.h> 
#include "resource.h" 

INT_PTR CALLBACK DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
      LPSTR lpCmdLine, int nCmdShow) 
{ 
    //Open dialog box 
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DLGFIRST), HWND_DESKTOP, DlgProc); 
    return 0; 
} 

INT_PTR CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam) 
{ 
     switch(Msg) 
     { 
     case WM_INITDIALOG: 
      return TRUE; 
      break; //Don't forget about the break; 
     case WM_COMMAND: 
      switch(wParam) 
      { 
       case IDOK: 
        EndDialog(hWndDlg, 0); 
        return TRUE; 
      } 
      break; 
     } 
} 
+0

@ W.B,如你所說,我並不需要單獨的資源文件呢? – 2013-05-09 07:34:46

+0

只是在resource.h中定義IDD_DLGFIRST? – 2013-05-09 07:35:10

+0

@AaymanKhalid - 如果你已經有一個資源文件,那麼你不需要創建另一個。只需將'define IDD_DLGFIRST'添加到'resource.h'中,該文件包含在'.rc'和'.cpp'文件中。這是因爲每個資源都需要有它的數字標識符。所以當你只鍵入IDD_DLGFIRST而沒有定義它的含義時,編譯器不知道要獲取哪個資源。 – 2013-05-09 07:52:19

相關問題