大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊该如何解决
大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊?
首先是.C文件的内容:
然后是.h文件内容
首先是.C文件的内容:
- C/C++ code
#include <Windows.h> #include "resource.h" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE hInst; TCHAR szAppName[]=TEXT("PopMenu"); int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){ 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,szAppName); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=szAppName; RegisterClass(&wndclass); hInst=hInstance; hwnd=CreateWindow(szAppName,TEXT("Popup Menu Demonstration"),WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd); 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){ static HMENU hMenu; static int idColor[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH}; static int iSelection=IDM_BKGND_WHITE; POINT point; switch(message){ case WM_CREATE: hMenu=LoadMenu(hInst,szAppName); hMenu=GetSubMenu(hMenu,0); return 0; case WM_RBUTTONUP: point.x=LOWORD(lparam); point.y=HIWORD(lparam); ClientToScreen(hwnd,&point); TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,point.x,point.y,0,hwnd,NULL); return 0; case WM_COMMAND: switch(LOWORD(wparam)){ case IDM_FILE_NEW: case IDM_FILE_OPEN: case IDM_FILE_SAVE: case IDM_FILE_SAVE_AS: case IDM_EDIT_UNDO: case IDM_EDIT_CUT: case IDM_EDIT_COPY: case IDM_EDIT_PASTE: case IDM_EDIT_CLEAR: MessageBeep(0); return 0; case IDM_BKGND_WHITE: case IDM_BKGND_LTGRAY: case IDM_BKGND_GRAY: case IDM_BKGND_DKGRAY: case IDM_BKGND_BLACK: CheckMenuItem(hMenu,iSelection,MF_UNCHECKED);//取消当前菜单选中的选项 iSelection=LOWORD(wparam); //用新的菜单ID进行赋值 CheckMenuItem(hMenu,iSelection,MF_CHECKED); //选中新的菜单选项 SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(idColor[LOWORD(wparam)-IDM_BKGND_WHITE]));//使用新的某种风格 InvalidateRect(hwnd,NULL,TRUE); return 0; case IDM_APP_ABOUT: MessageBox(hwnd,TEXT("Menu Demonstration Program \n")TEXT("(c)Charles Petzold,1998"),szAppName,MB_ICONEXCLAMATION|MB_OK); return 0; case IDM_APP_EXIT: SendMessage(hwnd,WM_CLOSE,0,0); //关闭窗口 return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wparam,lparam); }
然后是.h文件内容
- C/C++ code
#define IDM_FILE_NEW 40001 #define IDM_FILE_OPEN 40002 #define IDM_FILE_SAVE 40003 #define IDM_FILE_SAVE_AS 40004 #define IDM_APP_EXIT 40005 #define IDM_EDIT_UNDO 40006 #define IDM_EDIT_CUT 40007 #define IDM_EDIT_COPY 40008 #define IDM_EDIT_PASTE 40009 #define IDM_EDIT_CLEAR 40010 #define IDM_BKGND_WHITE 40011 #define IDM_BKGND_LTGRAY 40012 #define IDM_BKGND_GRAY 40013 #define IDM_BKGND_DKGRAY 40014 #define IDM_BKGND_BLACK 40015 #define IDM_TIMER_START 40016 #define IDM_TIMER_STOP 40017 #define IDM_APP_HELP 40018 #define IDM_APP_ABOUT 40019