RT
我自定义了个工具栏资源 我想让它和系统工具栏有一样的功能 例如隐藏 显示 拖拽 停靠等。所以我找到了MFC里面处理菜单项 “视图-工具栏 ”的菜单项 ID为 :ID_VIEW_TOOLBAR 的这个菜单命令 并新加了一个菜单项 ID为:ID_MYTOOLBAR  我用框架类处理 将ID_MYTOOLBAR  映射到处理ID_VIEW_TOOLBAR的同一个函数 可以结果是运行的时候新增的菜单项是灰的 也就是没有处理消息的函数。还望大家交流交流啊
谢谢

解决方案 »

  1.   

    添加了消息处理函数,COMMAND的响应后,就不是灰的了
      

  2.   

    你可以在Resource里面新建一个菜单资源,然后在MainFrm类里面即可照着系统菜单的方式给你的菜单添加相应的函数,就可以出现了至于说是灰色,那是因为它们没有响应的事件,有事件,自然就不是灰色了~
      

  3.   

    你单独为该菜单项添加WM_COMMAND消息响应呢?
      

  4.   

    好吧 我再说清楚点  ID_VIEW_TOOLBAR 这个是系统菜单里的一个子菜单项 用来隐藏 显示 系统工具栏等等。这个消息的映射是这样的:
    在afxwin.h  有class CFrameWnd 的定义如下:
    class CFrameWnd : public CWnd
    {
    ...
    public:
    afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);
    ...
    }
    在winfrm.cpp里面有映射:
    ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, &CFrameWnd::OnUpdateControlBarMenu)和函数实现:
    void CFrameWnd::OnUpdateControlBarMenu(CCmdUI* pCmdUI)我的做法是 新建一个子菜单项 ID为ID_MYTOOLBAR。
    在  winfrm.cpp里面加上ON_UPDATE_COMMAND_UI(ID_MYTOOLBAR, &CFrameWnd::OnUpdateControlBarMenu)请问这样做有什么问题吗?
      

  5.   

    其实 我都没看懂LZ你要做什么。如果只是自己自定义工具栏,并实现隐藏、显示等功能,不至于这么纠结吧>...
      

  6.   

    感觉是消息映射的原因。在MFC里消息映射顺序是view, doc, frame, app,消息由CFrameWnd捕捉时,如果以上类存在,就捕获不到,然后就会没有反应的。不知道是不是这个原因~