我用CSplitterWnd实现了窗口分割. 其中左窗口中为树形控件, 右窗口为列表控件CListView
我想在右侧的视图类中响应框架消息:ID_FILE_SAVE_AS. 据我所知, WM_COMMAND的传递方向是先到视图类, 再转向文档类. 但是我目前在视图类中响应主菜单条的ID_FILE_SAVE_AS, 加入消息映射函数后都不被执行. 我注意到视图类没有截获此消息, 而是被传递到了文档类中. 如果文档类中没有显式地加入对ID_FILE_SAVE_AS的消息映射, 就会执行CDocument::OnFileSaveAs函数.
因为加建一个单文档视图项目时, 在视图中可以截获此消息, 所以我怀疑是因为分割窗口所致, 请高手指点迷津.

解决方案 »

  1.   

    谢谢一楼和二楼的回复, 但是可能我表述不清, 大家没有理解我的意思呵.我在使用了分割窗口之后, 从主框架文件菜单上点击"文件另存为"时, 我想用分割窗口中的其中一个来响应, 我创建了消息映射函数, 也加入了消息映射宏ON_COMMAND(ID_FILE_SAVE_AS, &CMyView::OnFileSaveAs) 但是在界面上执行操作后, 这个消息映射函数没有被调用. 而是执行了文档类的响应函数. 很困惑.所以, 针对以上朋友的回复, 我想追问几句.
    对于一楼的回答, 目前消息没有被视图类截获, 怎么办呢? 对于二楼的回答, 完全不理解您的意思. 莫非是说在文档类的响应函数中再把消息传递给视图类中? 这个思路我觉得可以解决, 但是太复杂, 有点绕. 毕竟我是打算在视图类上截获这个消息后, 再从视图上采集数据后, 再交给文档类处理. 
      

  2.   

    还好, 这个问题我自己解决了. 
    原因是在使用了CSplitterWnd分割窗口之后, 两个视图类的优先级是一样的, 但是只有一个能响应这个消息. 结果是被视图分割中的0行0列的视图类给截获了. 那么只要知道消息到了哪里, 就好办, 如果不是我们希望的视图类获取了消息, 就再把它传递出来.两位朋友的解释有点模棱两可, 积分我就自己省下了. 谢过.