这是我测试的一个程序,实现的内容很简单,生成一个窗口,再用vs2005添加图标资源,可是添加完后再编译程序却说我““IDI_ICON”: 未声明的标识符”
有人知道为什么吗?
#include<windows.h>
#include"resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   PSTR szCmdLine,
   int iCmdShow)
{
TCHAR szAppName[]=TEXT("IconDemo");
MSG msg;
HWND hwnd;
WNDCLASS wndclass;
wndclass.style =CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON));
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)COLOR_WINDOW;
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),
szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("Icon Demo"),
  WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  NULL,
  NULL,
  hInstance,
  NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HICON hIcon;
static int cxIcon,cyIcon,cxClient,cyClient;
HDC hdc;
HINSTANCE hInstance;
PAINTSTRUCT ps;
int x,y;
switch(message)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT) lParam)->hInstance;
hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON));
cxIcon=GetSystemMetrics(SM_CXICON);
cyIcon=GetSystemMetrics(SM_CYICON);
return 0; case WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
return 0; case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
for(y=0;y<cyClient;y+=cyIcon)
for(x=0;x<cxClient;x+=cxIcon)
DrawIcon(hdc,x,y,hIcon);
EndPaint(hwnd,&ps);
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
d:\program files\microsoft visual studio 8\vc\projects\practise\icondemo\icondemo\icondemo.cpp(20) : error C2065: “IDI_ICON”: 未声明的标识符

解决方案 »

  1.   

    请在 resource.h 里看看有没有 IDI_ICON
      

  2.   

    resource.h里是这样的
    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ generated include file.
    // Used by icondemo.rc
    //
    #define IDI_ICON1                       101// Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        102
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1001
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif好像没有
      

  3.   

    wndclass.hInstance =hInstance;
    wndclass.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON));
    wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
    上面的IDI_ICON应IDI_ICON1吧!下面的一样吧!
    case WM_CREATE:
    hInstance=((LPCREATESTRUCT) lParam)->hInstance;
    hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON));
    cxIcon=GetSystemMetrics(SM_CXICON);
    cyIcon=GetSystemMetrics(SM_CYICON);
    return 0;
      

  4.   

    是可以了
    可是为什么会在resource里定义成ICON1呢?