后台任务对话框






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
函数。
请参阅示例项目,因为它有更详细的说明。