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: November 20, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Are you wanting to target two or more platforms such as iOS, Android, and/or Windows? You are not alone. 90% of enterprises today are targeting two or more platforms. Attend this eSeminar to discover how mobile app developers can rely on one IDE to create applications across platforms and approaches (web, native, and/or hybrid), saving time, money, and effort and introducing apps to market faster. You'll learn the trade-offs for gaining long …

  • IBM Worklight is a mobile application development platform that lets you extend your business to mobile devices. It is designed to provide an open, comprehensive platform to build, run and manage HTML5, hybrid and native mobile apps.

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds