菜单命令消息首先传递给主框架类 (默认情况下它不处理,会直接传给视类处理),所以一般情况下视类是最先处理菜单命令消息
要想主框架类响应菜单命令消息,你必须在主框架类中响应command,具体做法和视类相似
void CMainFrame::OnTest() 
{
// TODO: Add your command handler code here
MessageBox("ON  Menu In MainFrame");
}

解决方案 »

  1.   

    还有一个问题。如果在主框架类里边添加了对菜单命令的响应,例如
    void CMainFrame::OnTest() 
    {
    // TODO: Add your command handler code here
    MessageBox("ON  Menu In MainFrame");
    }
    那么需不需要在中间加上这条语句呢?
    CChildView::OnTest()
    如果不加上那么视图类还能收到消息么?换句话说就是消息是同时发给各个类的还是先发给一个比较高级的类然后一级一级向下发啊?因为以前没编过windows程序,对消息循环不甚了解,望达人指点。
      

  2.   

    还有我尝试加上
    void CMainFrame::OnTest() 
    {
    // TODO: Add your command handler code here
    MessageBox("ON  Menu In MainFrame");
    }
    但是没有反应
      

  3.   

    我发现了这段代码,是不是他在搞鬼呢?好像是CFrameWnd的虚函数么?
    BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
    {
    // let the view have first crack at the command
    if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
    return TRUE; // otherwise, do default handling
    return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
    }这个函数在CView和CFrameWnd里的功能是什么呢?刚才找了找,只能发现他在的定义,找不到实现阿。如果我想找某个函数的实现应该怎么找呢?
      

  4.   

    说明一下,如果你在主框架中响应了TEST,就不要在View中响应TEST,否则程序最后还是会响应View的TEST,只需在主框架类中加就行了(不知你要的是不是这种方式)一般情况下不要更改OnCmdMsg
    你首先直接在主菜单上增加个菜单项TEST(方法是将新建的子菜单的PopUp勾去)ID为IDM_TEST,然后在类向导中选择主框架类为其中的IDM_TEST增加一个响应command的函数
    运行后肯定会响应的!!
    同是学习者!!
    另外问你一下你知道如何在RichEdit中响应NM_CLICK吗?最好具体一点谢谢