首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊该如何解决

2012-03-30 
大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊?首先是.C文件的内容:C/C++ code#include Windows

大家帮忙看看,一个小WIN32API程序,为什么菜单显示不出啊?
首先是.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 



最后是rc文件内容:
C/C++ code
#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


我感觉是.C文件里
hMenu=LoadMenu(hInst,szAppName);
hMenu=GetSubMenu(hMenu,0); 这两句有问题,但是不知道到底问题出在哪

[解决办法]
2种方法:
1.
case WM_CREATE:
hMenu=LoadMenu(hInst,szAppName);
SetMenu(hwnd,hMenu);
//hMenu=GetSubMenu(hMenu,0);
return 0;
2.
wndclass.lpszMenuName=0; 
// wndclass.lpszMenuName=szAppName;

热点排行