大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊?
首先是.C文件的内容:
#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); }
#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
#PopMenu MENU DISCARDABLEBEGIN POPUP "MyMenu"BEGIN POPUP "&File" BEGIN MENUITEM "&New", IDM_FILE_NEW MENUITEM "&Open", IDM_FILE_OPEN MENUITEM "&Save", IDM_FILE_SAVE MENUITEM "&Save &As...",IDM_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "E&xit", IDM_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo", IDM_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "C&ut", IDM_EDIT_CUT MENUITEM "&Copy", IDM_EDIT_COPY MENUITEM "&Paste", IDM_EDIT_PASTE MENUITEM "De&lete", IDM_EDIT_CLEAR END POPUP "&Background" BEGIN MENUITEM "&White", IDM_BKGND_WHITE,CHECKED MENUITEM "&Light Gray", IDM_BKGND_LTGRAY, MENUITEM "&Gray", IDM_BKGND_GRAY MENUITEM "&Dark Gray", IDM_BKGND_DKGRAY MENUITEM "&Black", IDM_BKGND_BLACK END POPUP "&Timer" BEGIN MENUITEM "&Start", IDM_TIMER_START MENUITEM "S&top", IDM_TIMER_STOP END POPUP "&Help" BEGIN MENUITEM "&Help...", IDM_APP_HELP MENUITEM "&About MenuDemo...", IDM_APP_ABOUT ENDENDEND