Re: Modeless dialog box in a thread
Thank you very much for your suggestions.After reading a couple of
articles, I came up with a set of steps I may have to follow in order to get
this thing work. I am completely
new to this so please bear with me.
I have a dialog based application. So this is the sequence of steps I will
follow:
1. Define the user-defined message
#define UWM_REQUEST_DISK_SPACE_WARNING (WM_APP + 1)
2. Associate this with a handler defined in the main dialogs class
//}}AFX_MSG_MAP
ON_MESSAGE(UWM_REQUEST_DISK_SPACE_WARNING, OnCheckDiskSpace)
END_MESSAGE_MAP()
3. Handler Declaration
afx_msg LRESULT OnCheckDiskSpace(UINT wParam, LONG lParam);
4. Contents of the main dialog's handler which will pop up the modeless dialog
LRESULT CMyDialogApp::OnCheckDiskSpace(UINT wParam, LONG lParam)
{
CDiskSpaceWarn *pdlg;
ULARGE_INTEGER ll,pp,oo;
pdlg = new CDiskSpaceWarn;
GetDiskFreeSpaceEx(NULL,&ll,&pp,&oo);
float fDiskNum= (static_cast<float>(static_cast<__int64>(oo.QuadPart
/(1024
* 1024))))/1000;
if(fDiskNum<20.0)
{
pdlg->Create(IDD_DISKSPACEWARN,AfxGetApp()->m_pMainWnd);
pdlg->ShowWindow(SW_SHOW);
pdlg->CenterWindow(NULL);
pdlg->RunModalLoop();
}
}
5. Worker thread is defined as :
UINT DiskSpaceWarnThread(LPVOID pvoid)
{
BOOL running = true;
While(running)
{
::PostMessage(hwnd, UWM_REQUEST_DISK_SPACE_WARNING); // Posting
message to main window
//passing hwnd as parameter, Assuming I had passed the main dialog's handle
while creating the worker thread
switch(::WaitForSingleObject(shutdown, 3600000))
{ /* wait */
case WAIT_TIMEOUT:
break;
case WAIT_OBJECT_0:
running = FALSE;
continue;
default:
.... deal with errors
} /* wait */
return 0;
}
6. HANDLE shutdown = ::CreateEvent(NULL, TRUE, FALSE, NULL);
and will use
::SetEvent(shutdown) when the app is shutting down;
I will take care of the syntax once I am clear with the steps I need to
follow.
Please let me know if I am missing any piece of code. I need to add to make
it work correctly. Again, I am in very initial stages of MFC programming, so
please bear with me.
Thank you.