Szh Szh Sonno search Surtei Surtei Depravedteen Depravedteen Depravedteen C Szh 0search8开发PDA应用程序的过程中,在对话框类中加入上面方法却不能改变菜单项的状态,原因是当菜单被点击的过程时候会发出WM_INITMENUPOPUP消息,如果程序没有代码响应该消息则MFC默认程序再响应该消息的时候会将菜单项的状态恢复原状,因此若要使上述代码有效,则必须相应该消息。用过VC6.0的朋友都会下意识的找UPDATE_COMMAND_UI事件,可是VC++2008下没有提供该通用事件,因此只能靠响应WM_INITMENUPOPUP消息来实现了。传统对话框程序可以很容易的在属性——事件列表中找到WM_INITMENUPOPUP事件,而如果程序为SDI应用程序则必须要在CMainFrame类中手动创建该消息的响应函数。创建步骤如下:

 

首先在MainFrame.cpp中添加消息影射标志,代码如下:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

          ON_WM_INITMENUPOPUP()       //响应WM_INITMENUPOPUP事件

END_MESSAGE_MAP()

 

其次在MainFrame.h中添加消息相应成员函数,代码如下:

prvate:

     afx_msg void OnInitMenuPopup(CMenu *pMenu,UINT nStyle,BOOL bSysMenu);

 

最后,在MainFrame.cpp中添加该函数的实现,代码如下:

    

void CMainFrame::OnInitMenuPopup(CMenu *pMenu,UINT nStyle,BOOL bSysMenu)

{}

}

 

运行程序后,菜单项状态将会被显示

QQ:819543772