2013-05-09 81 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

相关问题