更新使用回调模态对话框的内容

这篇文章展示了如何使用更新模态对话框的内容 一个回调函数。 一些背景知识。当开发通信应用程序时,it 是否需要显示包含一些信息的模态对话框 关于后台发生了什么(统计信息、通信状态) 等等)。最常见的解决方案是通过所有的知识背景 进程(es)到模态对话框,然后使用计时器定期更新 对话框的内容控制。这个解决方案是可以的,但是比较复杂 这种对话框的设计使得它很难有通用的 根据地点显示不同类型信息的对话框 它的创建位置。这种解决方案的重要副作用是 需要提供对后台进程类的所有数据成员的访问 或需要声明所有数据成员为公共。两个选项 使源代码复杂化。 这里给出的解决方案使用一个给对话框的回调函数 通过它的构造函数。回调函数是属于的成员函数 到CWnd派生类(完全相同的技术可以用于 属于CObject派生类的回调函数)。的责任 在对话框中创建一个计时器,并定期(从OnTimer() 调用提供的回调函数。对话可以提供一些信息 返回回调函数。它将从回调函数收集dta 并使用它更新其控件的内容。与寻常相反 解决方案,只有回调函数需要访问 后台进程,因为它是一个回调函数,也可以 成为后台过程的一部分。 这种设计降低了对话框的复杂性,并启用了通用 对话框显示不同类型的信息,使用不同类型的 回调函数。另一个重要的副作用是应用程序 设计更简单,更健壮。 首先,我们需要创建一个回调函数类型: 隐藏,复制Code

typedef 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()处理程序)。 隐藏,复制Code

if (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

原文地址:https://www.cnblogs.com/Dincat/p/13473248.html