Processing System Messages

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
  }

Downloads

Download demo project - 4 Kb
Download source - 26 Kb


Comments

  • Fibers

    Posted by Legacy on 07/23/2003 12:00am

    Originally posted by: John

    If you don't want to use threads in your program, you could also try using fibers. Fibers can be scheduled within one thread according to your own algorithm, suiting a program like this quite well. See Jeffrey Richter's "Programming Applications for Microsoft Winodws" (5th Ed.) or MSDN for more information.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

  • A modern mobile IT strategy is no longer an option, it is an absolute business necessity. Today's most productive employees are not tied to a desk, an office, or a location. They are mobile. And your company's IT strategy has to be ready to support them with easy, reliable, 24/7 access to the business information they need, from anywhere in the world, across a broad range of communication devices. Here's how some of the nation's most progressive corporations are meeting the many needs of their mobile workers …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds