gpt4 book ai didi

c++ - 如何让我最顶层的窗口保持在最上面?

转载 作者:可可西里 更新时间:2023-11-01 13:29:33 25 4
gpt4 key购买 nike

<分区>

我会先解释我为什么需要它,因为我预计第一 react 是“你为什么需要它?”。我想检测鼠标光标何时位于屏幕边缘并且我不想使用 Hook 。因此,我创建了一个像素宽的 TOPMOST 隐形窗口。

我在 Win XP 上使用 C++,所以当创建窗口时(CreateWindowEx(WS_EX_TOPMOST | WS_EX_TRANSPARENT ...)一切正常。

不幸的是,如果用户移动另一个最顶层的窗口,例如我窗口上方的任务栏,我无法获得鼠标移动。

我尝试采用与以下建议的方法类似的方法来解决此问题: How To Keep an MDI Window Always on Top

我首先尝试检查 WM_WINDOWPOSCHANGED 中最顶层窗口的 Z 顺序

case WM_WINDOWPOSCHANGED :
WINDOWPOS* pWP = (WINDOWPOS*)lParam;

然而 pWP->hwnd 指向我的窗口并且 pWP->hwndInsertAfter 是 0,这应该意味着我的窗口在 Z 的顶部,即使它被任务栏覆盖。然后我尝试了:

case WM_WINDOWPOSCHANGED :
HWND topWndHndl = GetNextWindow(myHandle, GW_HWNDPREV)
GetWindowText(topWndHndl, pszMem, cTxtLen + 1);

而且我总是会看到“默认 IME”窗口位于我的窗口顶部。即使尝试使用 SetWindowPos() 或 BringWindowToTop () 将我的窗口置于顶部,“默认 IME”仍保持在顶部。我不知道什么是“默认 IME”以及如何检测任务栏是否在我的窗口顶部。

所以我的问题是:如何检测到我的最顶层窗口不再是最顶层窗口以及如何将其保持在最顶层?

附言我知道定期将我的窗口置于顶部的“蛮力”方法可行,但它很丑陋并且可能会对通知窗口产生一些不必要的推断。 (将我的窗口移到顶部会隐藏通知窗口。)

感谢您的宝贵时间和建议!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com