EVC中 菜单的打勾选项问题

在代码中,我用
state = submenu->GetMenuState( ID_OPERATION_CONNECTTOSERVER, MF_BYCOMMAND );
来读出菜单当前的状态,但很妖怪的是
无论初始时刻我在资源中设置为“Checked”状态还是“UnChecked”状态
我得到的State 都为0
不知道是什么原因,请教大家
谢谢
[224 byte] By [FloraCheng] at [2008-2-18]
# 1
那要看你这句话放在程序的什么地方了。
nbcool-载舟之水 at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...
# 2
放在菜单命令的响应函数中阿

我的想法是,响应菜单命令时,判断当前菜单项的状态,若为Unchecked 则设为 Checked,若为Checked 则设为Unchecked ,这样做有什么问题么?

谢谢
FloraCheng at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...
# 3
要看到具体的代码才能确定
nbcool-载舟之水 at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...
# 4
void CLocateAssistantDlg::OnOperationConnecttoserver()
{
// 判断菜单选项的状态
UINT state;
CMenu* pSubmenu = m_pMenuBar->GetSubMenu(0);

state = pSubmenu ->GetMenuState( ID_OPERATION_CONNECTTOSERVER, MF_BYCOMMAND );

ASSERT( state != 0xFFFFFFFF ) ;

if( state & MF_CHECKED )
{
// 若当前是CHECKED状态,则置为UNCHECKED状态
m_pMenuBar->CheckMenuItem(ID_OPERATION_CONNECTTOSERVER, MF_UNCHECKED | MF_BYCOMMAND );

}
else
{
// 若当前是UNCHECKED状态,则置为CHECKED状态
m_pMenuBar->CheckMenuItem(ID_OPERATION_CONNECTTOSERVER, MF_CHECKED | MF_BYCOMMAND );

}

}

上面的代码是菜单命令的响应函数,无论我在菜单资源中设置“Checked”或者“Unchecked”,程序运行后,直接点击此菜单项,发现得到的State都为“0”,所以感觉有点怪

请教了 谢谢!
FloraCheng at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...
# 5
纠正一下:

上面代码 if ... else ...语句中的m_pMenuBar 都应该改成pSubmenu

但奇怪的是 if ... else ... 语句之前的GetMenuState函数执行结果得到的State,不管当前为什么状态,值都为“0”

所以请教了 谢谢!
FloraCheng at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...
# 6
MENUITEMINFO info;
memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.fMask = MIIM_STATE;
pSubmenu->GetMenuItemInfo(ID_OPERATION_CONNECTTOSERVER, &info);

if( info.fState & MF_CHECKED )
{
...
}
yzx0023-无聊客 at 2007-10-22 > top of Msdn China Tech,硬件/嵌入开发,嵌入开发(WinCE)...