如果没有窗口,如何将窗口置于顶部,如果使用Windows API单击托盘图标,则关闭窗口?也就是说,与任务栏图标的作用非常相似。通过提到顶部,我的意思是用户完全可见。
我找不到判断窗口是否在顶部的方法,因为当单击托盘图标时,任务栏始终位于顶部。我试过检查窗口的Z顺序,但看起来不一致。例如,当应用程序窗口位于顶部并且单击托盘图标时,我希望将任意数量的任务栏/托盘窗口置于顶部,紧随其后的窗口是 的窗口>在上面。但事实并非如此。
我大多可以实现它,问题是切换不关心窗口是否打开并且对用户完全可见(在顶部)。单击托盘图标并且窗口当前关闭时,它将打开并正确显示。当窗口打开并位于顶部时,它也会正确关闭。但是,当窗口打开但不在顶部时,它将被关闭而不是被带到前台。
答案 0 :(得分:1)
扩大汉斯帕斯特所说的话:
“在顶部”并不重要,因为有些窗户总是在顶部;是窗口是否是您关注的前景窗口。
使用GetForegroundWindow()
查看您的窗口是否为前景窗口,如果不是,请SetForegroundWindow()
来实现。{/ p>
答案 1 :(得分:0)
感谢Mike Gelfand解决了这个问题!以下函数将返回:
int GetMyWindowLevel(HWND myWindow) {
WINDOWINFO myWindowInfo;
myWindowInfo.cbSize = sizeof(myWindowInfo);
if (!GetWindowInfo(myWindow, &myWindowInfo))
return -1;
int myWindowLevel = -1;
HWND currentWindow = GetTopWindow(NULL);
for (; currentWindow != NULL;
currentWindow = GetNextWindow(currentWindow, GW_HWNDNEXT)) {
WINDOWINFO currentWindowInfo;
currentWindowInfo.cbSize = sizeof(currentWindowInfo);
if (!GetWindowInfo(currentWindow, ¤tWindowInfo))
continue;
if ((currentWindowInfo.dwExStyle & WS_EX_TOPMOST) !=
(myWindowInfo.dwExStyle & WS_EX_TOPMOST) ||
(currentWindowInfo.dwStyle & WS_POPUP) != 0)
continue;
++myWindowLevel;
if (currentWindow == myWindow)
break;
}
return currentWindow == myWindow ? myWindowLevel : -1;
}