Solved

How to update the parent of a modeless child dialog window

Posted on 2006-06-19
5
437 Views
Last Modified: 2013-11-20
Hello

I have a class that inherit from CScrollView which creates a modeless dialog box when the user clicks on a button:

m_dlg = new CActorPropertiesDlg;
m_dlg->Create(IDD_PROPERTIES, this);
m_dlg->ShowWindow(SW_SHOWNORMAL);

What i want to achieve is the parent must still be refreshed when the focus is on the modeless dialog... right now, its only redrawn when the focus is on the parent.

My parent CScrollView object is refreshed using SetTimer(1, 100, NULL)... and in OnTimer( ), i use Invalidate.

How could i tell the modeless dialog to continue to update its parent each 100 ms?

Thanks
0
Comment
Question by:oroussea
5 Comments
 
LVL 48

Accepted Solution

by:
AlexFM earned 55 total points
ID: 16936632
When modeless dialog is active, parent window must continue to handle WM_TIMER messages. You don't need to do anything special for this.
0
 

Author Comment

by:oroussea
ID: 16936652
How can i tell the parent to do so?

Because its not like i told the parent to stop handling the timer event...

Should i set something to tell the parent to process the events even though it doesn't have focus?
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 16939939
You don't need to tell anything, parent continues to handle events in any case.
0
 
LVL 44

Assisted Solution

by:AndyAinscow
AndyAinscow earned 35 total points
ID: 16940182
I'm going to make a wild guess that your modeless dialog is performing a lengthy operation.  This will 'stop' the normal message handling in the thread (because it is very busy).  A patch is as follows.

In the processing in the modeless dialog
while(...)   <<--------------- or for loop or whatever
{
//work work work
DoEvents();   <<------------------------------------
}


void DoEvents()
{  
      MSG msg;  
      while ( ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE ) )
      {  
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
      }
}

This forces the message queue to be processed - gives timer and paint messages a chance to work.


If I have guessed correctly then you ought to consider using threads to perform the operation.
0
 
LVL 1

Assisted Solution

by:ramesh_hyd_ap
ramesh_hyd_ap earned 35 total points
ID: 16942794
Hi,

Create a user defined message like

  #define WM_UD_PARENTUPDATE           WM_USER+10

In the modeless dialog class has you are doing some operation so whenver you want to update parent
send the message to the parent as :

::SendMessage ( h_wndParent, WM_UD_PARENTUPDATE , NULL, NULL );

Handle the message handler in the parent window class as :

BEGIN_MESSAGE_MAP ....
ON_MESSAGE(WM_UD_PARENTUPDATE ,OnUpdateParent)
END_MESSAGE_MAP..


LRESULT OnUpdateParent (WPARAM wParam,LPARAM lParam)
{
  // write code here what ever you want to do in the parent.
  return 0;
}


Thanks,
Ramesh.


0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article, I'll describe -- and show pictures of -- some of the significant additions that have been made available to programmers in the MFC Feature Pack for Visual C++ 2008.  These same feature are in the MFC libraries that come with Visual …
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question