We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

Bring application to topmost

engllf
engllf asked
on
Medium Priority
542 Views
Last Modified: 2013-11-19
VC5

I have several MFC Applications opened and overlapping one another (all have SW_NORMAL state).  Every App does a little bit of data calculation and passes the results to the next App when the calculation is done.  

How do i programmatically moves an Application(that is being hidden by others) to the toppest application when this particular Application has the control ?  

I have tried AfxGetMainWnd()->BringWindowToTop(), SetFocus,
::SetForegroundWindow, SetActiveWindow... but they don't seem to work.

Sample code would be appreciated.
Thanx
Leow
Comment
Watch Question

Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview

Author

Commented:
How can i get a reference to the wndTopMost (which is a private member) in a global function ?

void BringWindowToTop( )
{  
  AfxGetMainWnd()->SetWindowPos (&wndTopMost??? ,0,0,0,0, SWP_NOMOVE| SWP_NOSIZE| SWP_SHOWWINDOW);

}





Commented:
Here a snipped peece of code afxwin.h:
      static AFX_DATA const CWnd wndTop; // SetWindowPos's pWndInsertAfter
      static AFX_DATA const CWnd wndBottom; // SetWindowPos's pWndInsertAfter
      static AFX_DATA const CWnd wndTopMost; // SetWindowPos pWndInsertAfter
      static AFX_DATA const CWnd wndNoTopMost; // SetWindowPos pWndInsertAfter


      BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,
                        int cx, int cy, UINT nFlags);

it is not inside the private scope it is public
and because it is a static member all CWnd derived classes will have the same
so you can use each CWnd to access wndTopMost.
if your BringWindowToTop function belongs not to a CWnd class simple try
void BringWindowToTop( )
{   
  CWnd* MainWnd= AfxGetMainWnd();
  MainWnd->SetWindowPos (&MainWnd->wndTopMost ,0,0,0,0, SWP_NOMOVE| SWP_NOSIZE| SWP_SHOWWINDOW);

}
that should do the work

Commented:
I would have expected CWnd::BringWindowToTop() to have worked.
Is it being called?
Are other windows set as TOPMOST?
Is the processing locking out the Windows redraw? - Try CWnd::Redraw()
It may also be that all the apps are trying to bring themselves to the front rather than just the one you think is processing.

I have an app that fires off sub-apps. It uses BringWindowToTop to force itself to the front without any major problems.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.