今天遇到一個問題:自己寫了書中代碼第11章對話方塊ABOUT1的程式,但是就是不能顯示功能表項目。
先上部分代碼
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){//這地方szAppName不只是類名,程式中還用做表徵圖ID,菜單文本IDstatic 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;//調用表徵圖,用到的szAppNamewndclass.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也必須要加上引號,否則不會調用。