How to activate a window of an application and display it at the topmost of the screen?

Asked
Viewd4506

0

The application is of MFC. Sometimes I need to activate the window and display it at the topmost of the screen when it's deactivated, or hidden, or minimized. Here's what I did:

AfxGetMainWnd()->BringWindowToTop();
AfxGetMainWnd()->SetActiveWindow();
AfxGetMainWnd()->SetForegroundWindow();

if(AfxGetMainWnd()->IsIconic())
AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL);
else
     AfxGetMainWnd()->ShowWindow(SW_SHOW);
AfxGetMainWnd()->UpdateWindow();

But I found sometimes the window was not activated and was still convered by window of other appliactions. Is there anything wrong with my approach? How should I fix this?

Thank you very much!

4506

2 ответов

1

try SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_SHOWWINDOW);

it should work on all windows, since all windows have the same handle type.

0

Попробуйте также вызвать SetFocus на окно, которое вы хотите показать.

Если это по-прежнему не работает или не работает на 100%, вы можете использовать хакерский обходной путь, при котором вы запускаете поток или таймер окна (проще таймера), который будет периодически проверять, действительно ли окно, которое вы хотят быть на вершине, большинство действительно попадает на вершину порядка. Как только это произойдет, возможно, на первой итерации, вы убьете поток или таймер.

количество, я вижу из вашего профиля, что вы задали 12 вопросов и не приняли ни одного. Мне трудно поверить, что ни один из ответов не помог вам. Просмотрите ответы и отметьте те, которые работают как ответы. Принятие 0% может привести к тому, что в ближайшее время люди не захотят отвечать на ваши вопросы.

Ура.