-2

我正在运行以下命令在 Windows 中创建一个对话框。当我运行它时,我得到以下错误:

                   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;
     }

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

我确实知道有资源文件,但我不太了解。有人可以帮我解决这个错误吗?

4

1 回答 1

3

您需要在资源文件以及调用 MAKEINTRESOURCE 的文件中定义符号。通常它是通过您#include 在两个地方的通用头文件完成的(例如#include resource.h在resource.rc 和main.cpp 中)。

并以resource.h#define IDD_DLGFIRST 1为例。只需确保该数字在资源中是唯一的。

编辑:

举个例子:

资源.h

#define IDD_DLGFIRST 1001
#define IDC_STATIC   1002

你的应用程序.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

你的应用程序.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;
       }
}
于 2013-05-09T07:17:03.580 回答