实例:windows 开始菜单-〉在其中的某个菜单项上右击鼠标键,会弹出一个新的上下文菜单;而且有的菜单项可以,有的不可以,
请问如何做到这点?

解决方案 »

  1.   

    pContexMenu=new Cmenu;
    if(!pContextMenu)
       return -1;
    BOOL bOK =pContextMenu->Load(IDR_CONTEXT);
    if(!bOK)
       return -1;
      

  2.   

    不明白,我再说得具体点:
    新建一个单文档视图结构的应用程序;
    在主菜单里添加一个新的菜单项Test(为popup类型),为其增加两个子下拉菜单,Test1和Test2;
    再新建一个菜单IDR_MENU1;为其添加两个子菜单项Sub1,Sub2;
    再新建一个菜单IDR_MENU2;为其添加两个子菜单项Sub3,Sub4;程序运行时,我想在右键单击Test-〉Test1时会弹出IDR_MENU1;
    程序运行时,我想在右键单击Test-〉Test2时会弹出IDR_MENU2;
    该如何处理呢?
    我原先想响应WM_CONTEXTMENU消息如下:
    void CTest05102View::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
    {
    // TODO: Add your message handler code here
    //*
    CMenu* pMenu = new CMenu;
    pMenu->LoadMenu( IDR_MENU1 );
    CMenu* pMenu1;
    pMenu1 = pMenu->GetSubMenu( 0 ); CPoint point1;
    GetCursorPos( &point1 );
    pMenu1->TrackPopupMenu( TPM_RIGHTBUTTON, point1.x, point1.y, this );
    //*/
    }
    但该函数只响应键盘上的快捷键;
      

  3.   

    我有两个思路:
    其一:响应WM_MENURBUTTONUP消息,可惜我不会;MFC消息映射中好像不支持该消息;
    其二:响应WM_NCRBUTTONDOWN消息,可是我试了一下,在下拉菜单上右击鼠标并不响应;毛病可能出在消息的传递路径上,遗憾的是我这方面的功夫不行,MFC的幕后工作知之甚少;
    高手们请指点一下。
      

  4.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Resources/Menus/MenuReference/MenuMessages/WM_MENURBUTTONUP.asp
      

  5.   

    TO BinaryPoet:
    你提供的这个链接是WM_MENURBUTTONUP的帮助吧,
    我已经看过它了,光那两句好像不太好使,
      

  6.   

    我搞定了!只要作如下定义
    #define WM_MENURBUTTONUP 0x0122
    就行了!是不是要谢谢我?
      

  7.   

    咱俩想到一块了,我昨天查了一下winuser.h,发现似乎由于版本的问题而使得WM_MENURBUTTONUP没被定义,可是我自己在mainfrm.cpp中定义了还是不好使嘛,待会儿我试一下,如果好使,定当重谢,以分鼓励;
    另外我的邮箱[email protected]
    欢迎把你的测试代码发给我
      

  8.   

    多谢,是很好使,咱俩可以再讨论一个问题,
    在winuser.h中有如下定义:
    .
    .
    .
    #if(WINVER >= 0x0500)
    #ifndef _WIN32_WCE
    #define WM_MENURBUTTONUP                0x0122
    #define WM_MENUDRAG                     0x0123
    #define WM_MENUGETOBJECT                0x0124
    #define WM_UNINITMENUPOPUP              0x0125
    #define WM_MENUCOMMAND                  0x0126
    .
    .
    .
    问题应该出在这里,这是win98以后才支持的消息,可是我在winxp+visual studio.net上为什么不支持呢?
    如果不重新定义该消息,通过比如设定系统默认的消息过滤路径等方法可否达到同样目的呢?
    如SetEventMask()