我编辑了一个菜单,用GetMenu()来得到菜单,可是为什么运行时没有显示?
还有,菜单有名字吗?如何命名??我用vc6.0
求教各位大侠,谢谢。

解决方案 »

  1.   

    用LoadMenu然后SetMenu
    或者在注册窗口类的时候指定,再或者在createwindow的时候指定
      

  2.   

    谢谢,用LoadMenu时,第二个参数是什么,菜单名吗??
    菜单怎么命名呢??
      

  3.   

    源程序
    #include<windows.h>
    #include"resource.h"
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
    {
    static TCHAR szAppName[]=TEXT("test");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;
    HMENU hMenu; hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)); wndclass.style =CS_HREDRAW|CS_VREDRAW;
    wndclass.lpfnWndProc=WndProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=NULL;//LoadIcon(hInstance,szAppName);
    wndclass.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
    wndclass.hCursor=LoadCursor(hInstance,IDC_ARROW);
    wndclass.lpszClassName =szAppName;
    wndclass.lpszMenuName =szAppName; if(RegisterClass(&wndclass)==0) 
    return 0;
    hwnd=CreateWindow(szAppName,
                  szAppName,
      WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX,
      250,150,300,280,
      NULL,
      hMenu,
      hInstance,
      NULL);
    ShowWindow(hwnd,iCmdShow);
    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;
    //HDC hdc; switch(message)
    {
    case WM_CREATE:
    MessageBox(hwnd,"create","create",MB_OK);
    return 0;
    case WM_COMMAND:
    //hMenu=GetMenu(hwnd); switch(LOWORD(wParam))
    {
    case IDM_NEW:
    MessageBox(hwnd,"new","new",MB_OK);
    break;
    }
    return 0;
    case WM_DESTROY:
       PostQuitMessage(0);
       return 0;
             case WM_LBUTTONDOWN:
               MessageBox(hwnd,"l","l",MB_OK);
    return 0;
    case WM_MBUTTONDOWN:
                      MessageBox(hwnd,"m","m",MB_OK);
    return 0;
    case WM_RBUTTONDOWN:
             MessageBox(hwnd,"r","r",MB_OK);
    return 0;
       }
    return DefWindowProc(hwnd,message,wParam,lParam);
    }
      

  4.   

    在WNDCLASS
    ws.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
    在Create函数,不要hMenu了,设为NULL,用class的menu的意思。
      

  5.   

    资源id和szAppName不是一样的哦
    当然,如果资源的id和szAppName相同就没有问题
    还有
    szAppName[] = "test";
    就可以了
      

  6.   

    CMainFrame* pFrame = new CMainFrame;
    m_pMainWnd = pFrame; pFrame->LoadFrame(IDR_MAINFRAME,
    WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
    NULL);

    pFrame->ShowWindow(SW_SHOW);
    pFrame->UpdateWindow();