大家好,本人初学vc.现有一事不明,望各位不吝赐教~
请问设置菜单可用不可用只能在OnInitDialog()中吗?
如果我想在当对话框中的某个值做出修改时,同时相应的修改菜单栏的可用状态。
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} CMenu *pMenu;
pMenu->LoadMenu(IDR_MENU1);
pMenu=CWnd::GetMenu()->GetSubMenu (4);
MenuEnable=MF_BYCOMMAND|MF_ENABLED;
UnMenuEnable=MF_BYCOMMAND|MF_GRAYED;
if (pApp->g_chosehall==0)
{
pMenu->EnableMenuItem (ID_DFA_CTRL,UnMenuEnable);
pMenu->EnableMenuItem (ID_BDA_CTRL,UnMenuEnable); }
if (pApp->g_chosehall==1)
{
pMenu->EnableMenuItem (ID_SPACECRAFT_CTRL,UnMenuEnable);
pMenu->EnableMenuItem (ID_UFO_CTRL,UnMenuEnable);
}
也就是话当我的pApp->g_chosehall变化时设置菜单栏状态。为什么运行出错~望各大侠赐教~
请问设置菜单可用不可用只能在OnInitDialog()中吗?
如果我想在当对话框中的某个值做出修改时,同时相应的修改菜单栏的可用状态。
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} CMenu *pMenu;
pMenu->LoadMenu(IDR_MENU1);
pMenu=CWnd::GetMenu()->GetSubMenu (4);
MenuEnable=MF_BYCOMMAND|MF_ENABLED;
UnMenuEnable=MF_BYCOMMAND|MF_GRAYED;
if (pApp->g_chosehall==0)
{
pMenu->EnableMenuItem (ID_DFA_CTRL,UnMenuEnable);
pMenu->EnableMenuItem (ID_BDA_CTRL,UnMenuEnable); }
if (pApp->g_chosehall==1)
{
pMenu->EnableMenuItem (ID_SPACECRAFT_CTRL,UnMenuEnable);
pMenu->EnableMenuItem (ID_UFO_CTRL,UnMenuEnable);
}
也就是话当我的pApp->g_chosehall变化时设置菜单栏状态。为什么运行出错~望各大侠赐教~
添加 WM_NCRBUTTONDOWN消息 在OnNcRButtonDown处理菜单
当对话框中的某个值做出修改时,在其处理函数内用
m_pMenu->EnableMenuItem(ID_BDA_CTRL,UnMenuEnable);
相应的修改菜单栏的可用状态。