IDD_ABOUT: необъявленный идентификатор

Я новичок в языке программирования c / c ++ и слежу за онлайн-учебником по Win32. Когда я собираю и компилирую свой проект (MS VS C ++ 2010 Express), я получаю эту ошибку: ‘IDD_ABOUT’: необъявленный идентификатор. Я не уверен, как это исправить. 🙁

main.cpp:

#include <Windows.h>

#define ID_FILE_EXIT 9001
#define ID_HELP_ABOUT 9002

const char g_szClassName[] = "myWindowClass";

BOOL CALLBACK AboutDlgProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
switch( Message )
{
case WM_INITDIALOG:

return TRUE;

case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDOK:
EndDialog( hwnd, IDOK );
break;

case IDCANCEL:
EndDialog( hwnd, IDCANCEL );
break;
}
break;

default:
return FALSE;
}
return TRUE;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_CREATE:
{
HMENU hMenu, hSubMenu;
HICON hIcon, hIconSm;

hMenu = CreateMenu();

hSubMenu = CreatePopupMenu();
AppendMenu( hSubMenu, MF_STRING, ID_FILE_EXIT, "E&xit" );
AppendMenu( hMenu, MF_STRING | MF_POPUP, ( UINT )hSubMenu, "&File" );

hSubMenu = CreatePopupMenu();
AppendMenu( hSubMenu, MF_STRING, ID_HELP_ABOUT, "&About" );
AppendMenu( hMenu, MF_STRING | MF_POPUP, ( UINT )hSubMenu, "&Help" );

SetMenu( hwnd, hMenu );

hIcon = ( HICON )LoadImage( NULL, "menu_one.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE );
if( hIcon )
SendMessage( hwnd, WM_SETICON, ICON_BIG, ( LPARAM )hIcon );
else
MessageBox( hwnd, "Could not load large icon!", "ERROR!", MB_OK | MB_ICONERROR );

hIconSm = ( HICON )LoadImage( NULL, "menu_one.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE );
if( hIconSm )
SendMessage( hwnd, WM_SETICON, ICON_SMALL, ( LPARAM )hIconSm );
else
MessageBox( hwnd, "Could not load small icon!", "ERROR!", MB_OK | MB_ICONERROR );
}
break;

case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case ID_FILE_EXIT:
PostMessage( hwnd, WM_CLOSE, 0, 0 );
break;

case ID_HELP_ABOUT:
{
int ret = DialogBox( GetModuleHandle( NULL ), MAKEINTRESOURCE( IDD_ABOUT ), hwnd, AboutDlgProc );
if( ret == IDOK )
MessageBox( hwnd, "Dialog exited with IDOK.", "Notice", MB_OK | MB_ICONINFORMATION );
else if( ret == IDCANCEL )
MessageBox( hwnd, "Dialog exited with IDCANCEL.", "Notice", MB_OK | MB_ICONINFORMATION );
else if( ret == -1 )
MessageBox( hwnd, "Dialog failed!", "Error", MB_OK | MB_ICONINFORMATION );
}
break;
}
break;

case WM_LBUTTONDOWN:

break;

case WM_CLOSE:
DestroyWindow( hwnd );
break;

case WM_DESTROY:
PostQuitMessage( 0 );
break;

default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;

// Step 1: Registering the Window Class
wc.cbSize = sizeof( WNDCLASSEX );
wc.style = 1;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = NULL;

if( !RegisterClassEx( &wc ) )
{
MessageBox( NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
return 0;
}

hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
500, 200, 800, 600,
NULL, NULL, hInstance, NULL );

if( hwnd == NULL )
{
MessageBox( NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
return 0;
}

ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );

while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}

return msg.wParam;
}

Resource.rc:

#include <Windows.h>

#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif

IDD_ABOUT DIALOG DISCARDABLE  0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My About Box"FONT 8, "MS Sans Serif"BEGIN
DEFPUSHBUTTON   "&OK",IDOK,174,18,50,14
PUSHBUTTON      "&Cancel",IDCANCEL,174,35,50,14
GROUPBOX        "About this program...",IDC_STATIC,7,7,225,52
CTEXT           "An example program showing how to use Dialog Boxes\r\n\r\nby theForger",IDC_STATIC,16,18,144,33
END

1

Решение

У меня такое ощущение, что Visual Studio Express не содержит надлежащего редактора ресурсов, который автоматически генерирует ресурсы, поэтому я предполагаю, что вы создали .rc подать вручную. Если это так, вам, вероятно, просто нужно определить символ. Создайте включаемый файл с именем resource.h и добавьте эту строку к нему:

#define IDD_ABOUT   100

Затем включите его в начало ваших файлов .cpp и .rc:

#include <Windows.h>
#include "resource.h" // add this line

Заголовки окон определяют общие идентификаторы ресурсов (IDOK, IDCANCEL, IDC_STATICи т. д.), но для всего остального вам нужно добавить свой собственный символ. Значения на самом деле не имеют значения — любое число до 65534 в порядке, если оно не конфликтует с любым другим идентификатором, используемым в одной и той же «области видимости» (например, два элемента управления в одном диалоговом окне должны иметь разные идентификаторы, но вы может повторно использовать тот же идентификатор в другом диалоговом окне).

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]