【发布时间】:2010-06-17 22:18:45
【问题描述】:
我将首先解释我为什么需要它,因为我预计第一反应会是“你为什么需要它?”。我想检测鼠标光标何时位于屏幕边缘并且我不想使用挂钩。因此,我创建了一个像素宽的 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);
我总是会发现“默认输入法”窗口位于我的窗口顶部。即使尝试使用 SetWindowPos() 或 BringWindowToTop () 将我的窗口置于顶部,“默认 IME”也会保持在顶部。我不知道什么是“默认输入法”以及如何检测任务栏是否在我的窗口顶部。
所以我的问题是:如何检测我的最顶层窗口不再是最顶层窗口以及如何将其保持在最顶层?
附:我知道定期将我的窗口置于顶部的“蛮力”方法是可行的,但很丑陋,并且可能会对通知窗口产生一些不必要的推断。 (将我的窗口置于顶部将隐藏通知窗口。)
感谢您的宝贵时间和建议!
【问题讨论】: