如何激活应用程序的窗口并将其显示在屏幕最上方?

问题描述 投票:0回答:3

该应用程序是MFC的。有时,我需要激活窗口并在其停用、隐藏或最小化时将其显示在屏幕的最顶部。这就是我所做的:

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

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

但是我发现有时窗口没有激活,仍然被其他应用程序的窗口转换。我的做法有什么问题吗?我该如何解决这个问题?

非常感谢!

mfc
3个回答
1
投票

尝试 SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_SHOWWINDOW);

它应该适用于所有窗口,因为所有窗口都具有相同的句柄类型。


0
投票

尝试在您想要显示的窗口上调用 SetFocus

如果这仍然不起作用,或者不能 100% 起作用,你可以使用一种 hacky 解决方法,即你将启动一个线程或窗口计时器(计时器更容易),它会定期检查以查看是否有你想要的窗口be topmost 确实使其成为订单的顶部。一旦发生这种情况,可能在第一次迭代时,您将杀死线程或计时器。

数量,我从您的个人资料中看到您提出了 12 个问题,但没有接受任何问题。我很难相信所有答案都不适合您。请考虑仔细阅读这些回复,并将那些有效的答案标记为答案。 0% 的接受度可能会导致人们不愿意很快回答你的问题。

干杯。


0
投票

这对我有用:

    SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
    SetForegroundWindow(hWnd);
© www.soinside.com 2019 - 2024. All rights reserved.