《Windows程序设计》对话框1

今天遇到一个问题:自己写了书中代码第11章对话框ABOUT1的程序,但是就是不能显示菜单项。

先上部分代码

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
	//这地方szAppName不只是类名,程序中还用做图标ID,菜单文本ID
	static TCHAR szAppName[]=TEXT("About1");
	MSG msg;
	HWND hwnd;
	WNDCLASS wndclass;

	wndclass.style=CS_HREDRAW|CS_VREDRAW;
	wndclass.lpfnWndProc=WndProc;
	wndclass.cbClsExtra=0;
	wndclass.cbWndExtra=0;
	wndclass.hInstance=hInstance;
	//调用图标,用到的szAppName
	wndclass.hIcon=LoadIcon(hInstance,szAppName);
	wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	//设置为类名
	wndclass.lpszClassName=szAppName;
	//调用菜单
	wndclass.lpszMenuName=szAppName;

	if(!RegisterClass(&wndclass))
	{
		MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
		return 0;
	}
	hwnd=CreateWindow(szAppName,TEXT("About Box Demo Program"),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 msg.wParam;
}

书中的szAppName因为有多个用处与图标ID、菜单ID有密切的关系。因此图标的ID必须设置为与szAppName一样的(包括大小写和引号都要有)。

菜单ID,如果一开始你没有加引号,直接由About改为"About"是会提示错误的,可能是系统认为你提交这两个是一样的,但是在调用时,这两个就不一样了。

因此可以先改为一个其它的,再改为"About",这个地方如果不加引号,是不会出现菜单的,同样,图标的ID也必须要加上引号,否则不会调用。


你可能感兴趣的:(《Windows程序设计》对话框1)