none
VC2012 MFC程序如何为CFileView类和COutputWnd类窗口随时添加显示信息 RRS feed

  • 问题

  • 各位高手你好!

        我用VC2012的MFC功能开发MDI程序,生成的程序带有缺省的文件控制窗(CFileView类)和输出窗(COutputWnd类),我需要在CView类或文档类中随调用的文件内容和图件向文件控制窗和输出窗动态添加显示内容,但不知如何获取活动的文件控制窗和输出窗,我该如何实现?

        恳请高手提供帮忙!先谢谢了!

    2013年12月4日 13:18

答案

  • 通知其他视图应该用CDocument::UpdateAllViews。

    COutputWnd应该是主框架的一个成员,在视图里可以通过GetTopLevelFrame访问主框架。



    Visual C++ MVP

    2013年12月4日 14:56
    版主
  • 文档类和视图可以GetActive是因为在视图激活时保存了指针。应用程序向导没有创建一个变量来保存活动的控件的指针。你可以自己声明这样一个变量然后处理控件的激活事件来来修改这个变量。CWnd::GetActiveWindow可以用于访问当前的活动窗口,但是这个窗口未必是你的控件,也有可能是你的控件的子窗口。

    需要通知别的对象的时候直接调用别的对象的代码是很烂的代码架构。你应该考虑声明一个事件处理函数链表,让感兴趣的对象订阅这个事件,而不是直接调用其他对象的代码,这样你的代码耦合性比较低,便于复用,编译时间也会缩短(在事件提供者的实现中不用包含其他类的头文件)。




    Visual C++ MVP

    2013年12月5日 15:57
    版主

全部回复

  • 通知其他视图应该用CDocument::UpdateAllViews。

    COutputWnd应该是主框架的一个成员,在视图里可以通过GetTopLevelFrame访问主框架。



    Visual C++ MVP

    2013年12月4日 14:56
    版主
  • 你好,谢谢你的回复!

    可能我的问题未表述清楚,文件控制窗和输出窗是MFC默认生成的Dock窗口,在其上有CList控件。我需要在程序运行的过程中随用户鼠标在显示图件上的位置动态显示鼠标位置处的文档信息,信息显示在两个自动生成的文件控制窗和输出窗中,我不知如何获取活动的控件,如能像文档类或视图类可以通过GetActiveDocument和GetActiveView的方法获得活动的文档和视图并得到各种参数值一样,不知如何控制两个窗口并向其随意添加显示内容?

    2013年12月5日 5:20
  • 文档类和视图可以GetActive是因为在视图激活时保存了指针。应用程序向导没有创建一个变量来保存活动的控件的指针。你可以自己声明这样一个变量然后处理控件的激活事件来来修改这个变量。CWnd::GetActiveWindow可以用于访问当前的活动窗口,但是这个窗口未必是你的控件,也有可能是你的控件的子窗口。

    需要通知别的对象的时候直接调用别的对象的代码是很烂的代码架构。你应该考虑声明一个事件处理函数链表,让感兴趣的对象订阅这个事件,而不是直接调用其他对象的代码,这样你的代码耦合性比较低,便于复用,编译时间也会缩短(在事件提供者的实现中不用包含其他类的头文件)。




    Visual C++ MVP

    2013年12月5日 15:57
    版主
  • 恳请蒋晟高手提供些链接帮助,本人新手,很多东西还不太了解!
    2013年12月6日 4:33
  • 恳请蒋晟高手提供些链接帮助,本人新手,很多东西还不太了解!

    可以从 FastDelegate 开始了解,然后再过度到std::function 和 Concurrency Runtime。
    • 已编辑 Skyseer 2013年12月6日 5:16
    2013年12月6日 5:15