这些是我的代码:
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;
}
菜单是可以弹出来的,但是菜单项是灰色不可用的,是不是没有添加消息的映射消息?怎么解决?
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;
}
菜单是可以弹出来的,但是菜单项是灰色不可用的,是不是没有添加消息的映射消息?怎么解决?
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 基于对话框,放在一个按钮的响应函数里的,
你可以调用菜单里有个函数EnableMenuItem使用,但可能你需要自己在系统消息栈处理消息
菜单是可以弹出,但是选项About是不可用的,所以没能实行它的命令函数!
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" ) );
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);
}}