Environment: VC6
The Requirement
I needed to run a loop in a modal dialog box, but found that although the UpdateWindow() function updated the window (and did not leave me with a White Box on the screen), the buttons onscreen were unresponsive. I searched the Internet and found articles on how to open a dialog in another thread and to keep monitoring the secondary dialog, but was not happy with the solution.
The Solution
I finally came up with a solution to process the dialog box’s messages in a function within the dialog box itself. It works great.
My solution consists of adding a function to the existing dialog class and calling it to process the messages.
BOOL CMyDialog::ProcessDialogMessages()
{
Sleep(0); // Yield to other
// system processes// Process the message queue
MSG dlgMsg;
if (::PeekMessage (&dlgMsg, NULL, 0, 0, PM_NOREMOVE))
// If there are
// pending messages
{
if (!AfxGetApp ()->PumpMessage ()) { // Allow them to be
// processed
::PostQuitMessage (0); // When no more
// messages exist,
// return WM_QUIT
// should return 0
return TRUE; // Return the caller,
// indicating that
// we just processed
// a Message and that
// there may be more
}
}// Simulate idle processing.
LONG lIdle = 0;
while (AfxGetApp ()->OnIdle (lIdle++));
return FALSE; // Return to Caller,
// saying that we
// did not process
// any messages
}