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.