菜单更新宏的原理
更新处理宏的工作原理是基于框架窗口类的。MFC中对话框菜单更新宏的原理是:当我们使用从CFrameWnd框架窗口类中派生的类创建窗口时,当我们单击菜单且菜单还未弹出前会产生WM_INITMENUPOPUP消息,如果我们派生出的类没有WM_INITMENUPOPUP消息处理程序,则消息会被传递到CFrameWnd框架窗口类的WM_INITMENUPOPUP消息处理程序中(CFrameWnd::OnInitMneuPopup),而此函数会利用命令传递调用各个菜单项的更新处理程序,也就是我们用ON_UPDATE_COMMAND_UI宏声明的程序。
对话框中更新菜单
因为对画框类CDialog是直接从CWnd类继承而来的,当其接受到WM_INITMENUPOPUP消息后如果没有处理消息会交给CWnd::OnInitMenuPopup()消息处理程序进行默认处理
所以其不能使用更新处理宏来更新菜单,一般我们都是通过直接自己处理WM_INITMENUPOPUP消息来更新菜单