如何发送命令到文档对象,如何发送命令到文档对象
【 tulaoshi.com - C语言心得技巧 】
如何发送命令到文档对象 赵湘宁 本文范例代码:Doctime1.zip Doctime2.zip 问题: 我编了一个类似Windows 2000 上性能监视器的程序。在这个程序中,我创建了一个文档对象和几个视图。文档对象负责有规律地采集数据,然后通知相关的视图以不同的格式显示这些数据。文档对象为了有规律地采集数据,它需要一个定时(time)事件。但是,文档不是一个基于窗口的对象,所以它没有这样的定时事件。我权衡了三种解决方案: 在其中的一个视图中创建定时器。当事件发生时通知文档对象获取数据。 为每一个文档(或在每个文档内)创建一个单独的线程,以便这个线程能有规律地创建时间事件。 在CMainFrame中创建一个定时器并从中调用文档函数 这三种方法我都不满意。能否给出一种更好的解决方案? 解答: 在你列出的解决方案中,将定时器放入视图是最糟的想法,因为那样的话你就得为每个视图建一个定时器,你应该将定时器视为一种相对有限的资源(这一点在过去尤其如此,现在这个问题考虑得较少)。创建单独的线程对于定时器这样简单的东西又有牛刀弑鸡之嫌。线程无疑使事情复杂化。那么还有第三个方案:在主框架中创建定时器并从中调用文档函数。我会告诉你如何用这个方案直截了当地实现所要的功能,然后我还会展示另外一种你没有想到的方法。//CMainFrame::OnTimer(...){ SendMessage(WM_COMMAND, ID_APPTIMER);}//也就是说,当主框架得到定时器信号的同时,也向自己发送了一个ID_APPTIMER命令。MFC会将这个命令发送到系统,任何具有ON_COMMAND处理器并能处理ID_APPTIMER命令的对象都可以处理这个事件。你可以用ON_COMMAND_EX来对付多个对象处理相同事件的情况。
// in CWnd::OnCommandOnCmdMsg(nID, CN_COMMAND, NULL, NULL);//这里,nID是命令ID,编码CN_COMMAND告诉OnCmdMsg这是个命令事件——与更新UI事件相对(此时编码应该是CN_UPDATE_COMMAND_UI)。其它参数对于CN_COMMAND没用。
//pDoc->OnCmdM
来源:http://www.tulaoshi.com/n/20160129/1483615.html