Dnia 19-06-2007 o 11:33:35 Theo Landman
<tlandman_NO_SPAM@justcroft_NO_SPAM.com> napisa?(a):
Hello,
I have trouble with AfxGetMainWnd()->EnableWindow() at least on
Windows XP. Not tested this . My main application needs to run another
GUI program and while this program run should not be accessible for
user input. In order to do this I call
AfxGetMainWnd()->EnableWindow(FALSE); Start the GUI program Then use a
bit of code to wait for the GUI to finish. See snippet below:
HANDLE aHandles[2];
aHandles[0] = GetCurrentProcess();
aHandles[1] = hGUI;
do
{
DWORD dwResult = ::MsgWaitForMultipleObjects(2, aHandles,
FALSE, INFINITE, QS_ALLEVENTS);
if ( !prcGUI.IsRunning() )
break;
} while ( AfxGetThread()->PumpMessage() );
However, when the GUI program stops my main application won't get the
focus automatically again after I call
AfxGetMainWnd()->EnableWindow(TRUE); The application behaves as being
minimized and I have to explicitly click on the program icon in the
desktop bar to bring it back up.
I tried different combinations of SetActiveWindow(),
SetForegroundWindow(), BringWindowToTop() and SetFocus() but nothing
happens.
If I don't use EnableWindow() this problem does not occur.
So in short how to force my application back to the foreground?
Any help appreciated,
Theo
I think you should check if the window you have in the first return of
AfxGetMainWnd() is the same window as in the second time. If you have a
variable of your CWinApp derived class, (like CSampleApp theApp), try
theApp.GetMainWnd().
Thanks for the suggestion, but that didn't solve the problem either.
BTW, my application is not an automation client/server.