65.9K
CodeProject 正在变化。 阅读更多。
Home

后台任务对话框

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.55/5 (6投票s)

2004年4月16日

CPOL

1分钟阅读

viewsIcon

125649

downloadIcon

2291

一个用于对话框的封装,用于执行耗时操作,但又不希望应用程序看起来卡死。

Sample screenshot

引言

大家好,我叫 Mauro H. Leggieri,是一名 Windows 和游戏程序员。我做了一个可能对您有用的东西,想和大家分享。

我编写了一个名为 CBackgroundTaskDialog 的类,它继承自标准的 CDialog 类。它是一个用于对话框的封装,用于执行耗时操作,可以选择性地显示进度信息,但又不希望应用程序看起来卡死

使用代码

代码只是创建一个后台线程并调用一些成员函数,您可以在其中编写自己的代码,并有一些成员来控制何时启动/停止后台进程。

要在您的项目中使用的代码,首先将 BackgroundTaskDialog.cppBackgroundTaskDialog.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 函数。

请参阅示例项目,因为它有更详细的说明。

© . All rights reserved.