后台任务对话框






3.55/5 (6投票s)
一个用于对话框的封装,用于执行耗时操作,但又不希望应用程序看起来卡死。

引言
大家好,我叫 Mauro H. Leggieri,是一名 Windows 和游戏程序员。我做了一个可能对您有用的东西,想和大家分享。
我编写了一个名为 CBackgroundTaskDialog 的类,它继承自标准的 CDialog 类。它是一个用于对话框的封装,用于执行耗时操作,可以选择性地显示进度信息,但又不希望应用程序看起来卡死。
使用代码
代码只是创建一个后台线程并调用一些成员函数,您可以在其中编写自己的代码,并有一些成员来控制何时启动/停止后台进程。
要在您的项目中使用的代码,首先将 BackgroundTaskDialog.cpp 和 BackgroundTaskDialog.h 文件添加到您的项目中。
然后,在您想要子类化的对话框的头文件中,添加 include "BackgroundTaskDialog.h" 语句,并将所有 CDialog 单词替换为 CBackgroundTaskDialog,并将以下成员声明添加到类中
class your_dialog_class : public CBackgroundTaskDialog { // Class definition an so on... // Code that you must add to the class: public: void RunBackgroundTask(); }
之后,在对话框的 CPP 文件中,也将所有 CDialog 单词替换为 CBackgroundTaskDialog,并添加以下成员代码
void your_dialog_class_name::RunBackgroundTask() { //Here you should add the code for the long-term process to do //At regular intervals you should call then //CheckForBackgroundTaskAbort function //to check for an abort signal. If the function //returns TRUE, usually simply return }
要启动后台进程,您必须使用 StartBackgroundTask 函数。如果一切正常,它将返回 1,否则返回小于 0 的值。该函数通常在 OnInitDialog 函数中使用。
BOOL your_dialog_class_name::OnInitDialog()
{
  // Code added by MFC AppWizard and your own code
  // Example code to add:
  if (StartBackgroundTask() < 0)
  {
     AfxMessageBox(_T("Error"));
     PostMessage(WM_CLOSE, 0, 0);
     return TRUE;
  }
  return TRUE;
}
最后,如果您想中止后台进程,请调用 StopBackgroundTask 函数。
请参阅示例项目,因为它有更详细的说明。


