更新MFC中的视图,跟踪.NET Framework中的事件
2006-07-19 11:28:40 来源:WEB开发网核心提示: for (/* each CDocTemplate in app */) {for (/* each CDocument in CDocTemplate */) {// do something}}既然列举文档是如此的有用,我写了一个很小的类 CDocEnumerator,更新MFC中的视
for (/* each CDocTemplate in app */) {
for (/* each CDocument in CDocTemplate */) {
// do something
}
}
既然列举文档是如此的有用,我写了一个很小的类 CDocEnumerator,隐藏了MFC中所有的模板和位置的机制。 实际上,这个类是我早在1995年9月写的——呵呵,这都几乎是十年前的事了。代码如 Figure 1 所示。 使用 CDocEnumerator 很容易在程序中列举所有打开的文档。
CDocEnumerator it;
CDocument* pdoc;
while ((pdoc=it.Next())!=NULL) {
// do something
}
还有什么比这个更容易?为了在实际的例子中示范这个类的用法,我写了一个小程序 UpdView,该程序将模拟实时数据采集程序。UpdView 中每个文档对其打开的秒数进行计数。Figure 2 显示了工作中的 UpdView。如果下载、生成并运行 UpdView,你便能看到每个视图每秒更新显示文档打开的秒数。在 Figure 2 中,名字为 file2.dat 的文档有两个视图,它们都显示同一个底层文档。每个文档维持自己的自打开后的时间数(数据),视图只是进行显示(表现)。在你自己的程序中,UpdView通过主框架的定时器设置工作。这个定时器处理事件使用 CDocEnumerator 告诉每一个文档收集更多的数据,如下面所示:
void CMainFrame::OnTimer(UINT_PTR nIDEvent) {
CDocEnumerator it;
CDocument* pdoc;
while ((pdoc=it.Next())!=NULL) {
((CMyDoc*)pdoc)->CollectMoreData();
}
}
更多精彩
赞助商链接