如题!

解决方案 »

  1.   

    TrackPopupMenu()
    然后你添加菜单命令。
      

  2.   

    CMenu menu; //定义CMenu类对象 
    menu.LoadMenu(IDC_POPMENU); //装入刚建立的菜单IDC_POPMENU menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,pWnd); 
    /*GetSubMenu(0)得到IDC_POPMENU的第一层子菜单,TrackPopupMenu将菜单弹出到(x,y)处。由于设置为TPM_LEFTALIGN,所以菜单以(x,y)为左上角。*/ 给IDC_POPMENU创建一个响应函数,在函数中DoModal()就可以了
      

  3.   

    在窗口回调函数中使用case WM_CONTEXTMENU:
    POINT pt;
    pt.x = LOWORD (lParam) ;
    pt.y = HIWORD (lParam) ;BOOL TrackPopupMenu(
      HMENU hMenu,         // handle to shortcut menu
      UINT uFlags,         // screen-position and mouse-button flags
      int x,               // horizontal position, in screen coordinates
      int y,               // vertical position, in screen coordinates
      int nReserved,       // reserved, must be zero
      HWND hWnd,           // handle to owner window
      CONST RECT *prcRect  // ignored
    );
    在使用这个TrackPopupMenu函数就行啦
    hMenu之前使用
    HMENU LoadMenu(
      HINSTANCE hInstance,  // handle to application instance
      LPCTSTR lpMenuName    // menu name string or menu-resource 
                            // identifier
    );
    获取
      

  4.   

    再通过相应的菜单项,
    BOOL ShowWindow(
      HWND hWnd,     // handle to window
      int nCmdShow   // show state of window
    );UpdateWidnow()函数来显示窗口
      

  5.   

    #define CM_ABOUT 1000
    #define CM_DOCUMENT 1001
    switch(msg)
    {
    case WM_RBUTTONUP:
    POINT t;
    GetCursorPos(&t);
    ScreenToClient(hwnd,&t);
    HMENU hMenu,hPopupMenu;
    hMenu=CreatePopupMenu();
    hPopupMenu=CreatePopupMenu();
    Append(hMenu,MF_STRING,CW_ABOUT,"关于(&A)");
    Append(hPopupMenu,MF_STRING,CW_DOCUMENT,"文档(&D)");
    InserMenu(hMenu,1,MF_BYPOSITION|MF_STRING|MF_POPUP,hPopupMenu,"新建");
    TrackPopupMenu(hMenu,TPM_TOPALTIGN,t.x,t.y,0,hwnd,0);
    break;
    }
    如果有错忽视之。
      

  6.   

    补充:
    然后就是
    WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case CW_ABOUT:
    MessageBox(hwnd,"关于信息","关于",MB_ICONINFORMATION);
    break;
    case CW_DOCUMENT:
    //DO
    break;
    default:
    break;
    }
    break;