有关win32应用程序中load资源资源的问题
最近在学windows程序设计,看的是Charles Petzold的那本《windows程序设计》,里面引用资源的方法大多是给资源一个字符串名字(需要加引号)的ID(如要添加一个菜单资源,它的ID可以是应用程序名称),然后将这个名字赋给wndclass.lpszMenuName,的确这么做的确要比用ID号省事多了,但是我发现这么做经常加载不了,有时候名字改一下就可以,有时候怎么改名字都没有,但是如果用ID号的话然后用MAKEINTRESOURCE宏转换就可以。
所以我就对此很纳闷,有哪位这方面的高手指教下,对于此问题有哪些要注意的地方和建议。
在此先谢过了。
下面是一个精简过的例子:(没有一点问题,执行后就是没有菜单)
#include<windows.h>
#include"resource.h"
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
TCHAR szAppName[]="MENUDEMO";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,INT iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=szAppName;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,"ERROR!",szAppName,0);
return 0;
}
hwnd=CreateWindow(
szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}