这篇文章展示了如何使用更新模态对话框的内容
一个回调函数。
一些背景知识。当开发通信应用程序时,it
是否需要显示包含一些信息的模态对话框
关于后台发生了什么(统计信息、通信状态)
等等)。最常见的解决方案是通过所有的知识背景
进程(es)到模态对话框,然后使用计时器定期更新
对话框的内容控制。这个解决方案是可以的,但是比较复杂
这种对话框的设计使得它很难有通用的
根据地点显示不同类型信息的对话框
它的创建位置。这种解决方案的重要副作用是
需要提供对后台进程类的所有数据成员的访问
或需要声明所有数据成员为公共。两个选项
使源代码复杂化。
这里给出的解决方案使用一个给对话框的回调函数
通过它的构造函数。回调函数是属于的成员函数
到CWnd派生类(完全相同的技术可以用于
属于CObject派生类的回调函数)。的责任
在对话框中创建一个计时器,并定期(从OnTimer()
调用提供的回调函数。对话可以提供一些信息
返回回调函数。它将从回调函数收集dta
并使用它更新其控件的内容。与寻常相反
解决方案,只有回调函数需要访问
后台进程,因为它是一个回调函数,也可以
成为后台过程的一部分。
这种设计降低了对话框的复杂性,并启用了通用
对话框显示不同类型的信息,使用不同类型的
回调函数。另一个重要的副作用是应用程序
设计更简单,更健壮。
首先,我们需要创建一个回调函数类型:
隐藏,复制Codetypedef BOOL (CWnd::*TWindowUpdate)(int& nCount, CString& sText, DWORD dwData);
这个函数的参数是特定于应用程序的。然后我们修改
对话框的构造函数:
隐藏,复制Code// pWindow is a pointer to the CWnd derived object that implements the callback function
TTestDialog(TWindowUpdate pUpdateCallback, CWnd pWindow,
DWORD dwData = 0, CWnd pParent = NULL) // standard constructor
最后,我们调用回调函数(通常来自OnTimer()处理程序)。
隐藏,复制Codeif (m_pWindow && m_pWindowUpdateCallback)
{
int nCount = 0;
CString str;
if ((m_pWindow->*m_pWindowUpdateCallback)(nCount, str, m_dwData))
{
CString strTemp;
strTemp.Format("%d", nCount);
m_ItemCount.SetWindowText(strTemp);
m_LastItem.SetWindowText(str);
}
}
回调函数在CWnd派生窗口(主框架、视图等)中实现。
本文转载于:http://www.diyabc.com/frontweb/news10749.html