Introduction
Hi, my name is Mauro H. Leggieri, a Windows and Game programmer. I made a little thing that may be useful, and want to share with you.
I wrote a class named CBackgroundTaskDialog
derived from the standard CDialog
class. It is a wrapper for dialog boxes where you must do a long-time process, optionally showing the progress information, but you don't want your application to appear to be hung.
Using the code
The code simply creates a background thread and calls some member functions where you write your own code and have some members to control when to start/stop the background process.
To use the code in your project, first add the BackgroundTaskDialog.cpp and BackgroundTaskDialog.h files to your project.
Then, in the header file of the dialog you want to subclass, add the include "BackgroundTaskDialog.h"
statement and replace all CDialog
words with CBackgroundTaskDialog
and add the following member declarations to the class:
class your_dialog_class : public CBackgroundTaskDialog
{
public:
void RunBackgroundTask();
}
After this, replace in the CPP file of the dialog all CDialog
words with CBackgroundTaskDialog
too and add the following members code:
void your_dialog_class_name::RunBackgroundTask()
{
}
To start the background process, you must use the StartBackgroundTask
function. It returns a value of 1 if all is ok or less than 0 if an error occurs. The function is usually used in the OnInitDialog
function.
BOOL your_dialog_class_name::OnInitDialog()
{
if (StartBackgroundTask() < 0)
{
AfxMessageBox(_T("Error"));
PostMessage(WM_CLOSE, 0, 0);
return TRUE;
}
return TRUE;
}
At last, if you want to abort the background process, call the StopBackgroundTask
function.
See the example project because it has more explanations.