这些是我的代码:
     CPoint pt;
    GetCursorPos( & pt );    CMenu menuPopup;    menuPopup.CreatePopupMenu();
    
    menuPopup.AppendMenu( MF_STRING|MF_ENABLED,ID_MENUITEM_ABOUT , _T( "About" ) );
    menuPopup.AppendMenu( MF_SEPARATOR );

    menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_SHOW, _T( "Open" ) );
    menuPopup.AppendMenu( MF_SEPARATOR );
    menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_EXIT, _T( "Exit" ) );
    menuPopup.AppendMenu( MF_SEPARATOR );
    menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_CANCEL, _T( "Cancel" ) );
    int nCmd = ( int ) menuPopup.TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, AfxGetMainWnd() );    switch( nCmd )
    {
               case ID_MENUITEM_ABOUT:
 AfxMessageBox(_T("Click About"));
 break; case ID_MENUITEM_SHOW:
         AfxMessageBox(_T("Click Open"));
         break; case ID_MENUITEM_EXIT:
         AfxMessageBox(_T("Click Exit"));
         break; case ID_MENUITEM_CANCEL:
         AfxMessageBox(_T("Click Cancel"));
         break;        default:
        break;
    } 
菜单是可以弹出来的,但是菜单项是灰色不可用的,是不是没有添加消息的映射消息?怎么解决?   

解决方案 »

  1.   

    不明白楼主的意思,我用你贴的代码是可以成功出现菜单的,而且也能响应,messagebox成功弹出。
      

  2.   

    Chenbitian你用我的代码能实现功能吗?我怎么不行?可以弹出菜单,但是菜单项是灰色不可用的。你把代码放在哪里写的?我写这个代码是想在单击一个ClistCtrl控件的时候能弹出菜单并且实现菜单消息处理,可是却没能实现。
      

  3.   

    AfxGetMainWnd() 换成你处理消息的窗口
      

  4.   

    CPoint pt; 
        GetCursorPos( & pt );     CMenu menuPopup;     menuPopup.CreatePopupMenu(); 
         
        menuPopup.AppendMenu( MF_STRING |MF_ENABLED,ID_MENUITEM_ABOUT , _T( "About" ) ); 
        menuPopup.AppendMenu( MF_SEPARATOR );     int nCmd = ( int ) menuPopup.TrackPopupMenu( TPM_LEFTALIGN  | TPM_LEFTBUTTON  | TPM_RIGHTBUTTON  | TPM_RETURNCMD, pt.x, pt.y, AfxGetMainWnd() );     switch( nCmd ) 
        { 
                    case ID_MENUITEM_ABOUT: 
     AfxMessageBox(_T("Click About")); 
     break; 
            default: 
            break; 
        }
    ==========================================
    可以正常弹出菜单,
    VC6.0 基于对话框,放在一个按钮的响应函数里的,
      

  5.   

    如果你的菜单是完全动态创建,不是直接消息映射方式实现就会出现这种情况。
    你可以调用菜单里有个函数EnableMenuItem使用,但可能你需要自己在系统消息栈处理消息
      

  6.   


    菜单是可以弹出,但是选项About是不可用的,所以没能实行它的命令函数!
      

  7.   

    在主菜单上新建一个根菜单作为右键菜单,在处理主框架窗体的OnCreate方法中,调用主框架窗体的m_bAutoMenuEnable赋成false.这样,MFC不会自动地将主菜单中的菜单项设为不可用.新建的根菜单下可以新建右键菜单项.然后,调用EnableMenuItem函数将不需要显示的菜单项设置成灰色.
      

  8.   

    好像最后面少了个menuPopup.DestroyMenu();我记得MFC下面后面一般不用 TPM_RETURNCMD的,最好用WM_COMMAND命令来处理菜单的操作.    CPoint pt;
        GetCursorPos( & pt );    CMenu menuPopup;    menuPopup.CreatePopupMenu();
        
        menuPopup.AppendMenu( MF_STRING &brvbarMF_ENABLED,ID_MENUITEM_ABOUT , _T( "About" ) );
        menuPopup.AppendMenu( MF_SEPARATOR );    menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_SHOW, _T( "Open" ) );
        menuPopup.AppendMenu( MF_SEPARATOR );
        menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_EXIT, _T( "Exit" ) );
        menuPopup.AppendMenu( MF_SEPARATOR );
        menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_CANCEL, _T( "Cancel" ) );
        menuPopup.TrackPopupMenu( TPM_LEFTALIGN ¦TPM_LEFTBUTTON ¦TPM_RIGHTBUTTON, pt.x, pt.y, AfxGetMainWnd() );
      menuPopup.DestroyMenu();
    BOOL OnCommand(WPARAM wParam, LPARAM lParam)
    {
    if(HIWORD(wParam) == BN_CLICKED)
    {
        switch((int)LOWORD(wParam))
        {
        case ID_MENUITEM_ABOUT:
             AfxMessageBox(_T("Click About"));
             return TRUE;
             break;    case ID_MENUITEM_SHOW:
             AfxMessageBox(_T("Click Open"));
             return TRUE;
             break;    case ID_MENUITEM_EXIT:
             AfxMessageBox(_T("Click Exit"));
             return TRUE;
             break;    case ID_MENUITEM_CANCEL:
             AfxMessageBox(_T("Click Cancel"));
             return TRUE;
             break;    default:
            break;
        } 
        return CDialog::OnCommand(wParam, lParam);
    }}