即使其他应用程序在Fullscreen上运行,是否可以使窗口始终保持在顶部?我正在使用TopMost = true,但当其他应用程序在全屏运行时,我的隐形.WindowStyle = None顺便说一句,这是窗口.
编辑:不要让其他窗口最小化
我将首先解释为什么需要它,因为我预计第一个响应将是"你为什么需要它?".我想检测鼠标光标何时位于屏幕边缘,我不想使用挂钩.因此,我创建了一个像素宽的TOPMOST不可见窗口.
我在Win XP上使用C++,所以当创建窗口时(CreateWindowEx(WS_EX_TOPMOST | WS_EX_TRANSPARENT ...)一切正常.
不幸的是,如果用户移动另一个最顶层的窗口,例如窗口上的任务栏,我就不会移动鼠标.
我试图解决这个问题,类似于以下建议的方法: 如何保持MDI窗口始终位于顶部
我首先尝试在WM_WINDOWPOSCHANGED中检查我最顶层窗口的Z顺序
case WM_WINDOWPOSCHANGED :
WINDOWPOS* pWP = (WINDOWPOS*)lParam;
Run Code Online (Sandbox Code Playgroud)
然后pWP-> hwnd指向我的窗口并且pWP-> hwndInsertAfter为0,这意味着我的窗口位于Z的顶部,即使它被任务栏覆盖.然后我尝试了:
case WM_WINDOWPOSCHANGED :
HWND topWndHndl = GetNextWindow(myHandle, GW_HWNDPREV)
GetWindowText(topWndHndl, pszMem, cTxtLen + 1);
Run Code Online (Sandbox Code Playgroud)
而且我总是得到"默认IME"窗口在我的窗口顶部.即使尝试使用SetWindowPos()或BringWindowToTop()将窗口置于顶部,"默认IME"也会保持在顶部.我不知道什么是"默认IME"以及如何检测任务栏是否在我的窗口之上.
所以我的问题是:如何检测我的最顶层窗口不再是最顶层的窗口以及如何将它保持在顶部?
PS我知道周期性地将我的窗口置于顶部的"强力"方法仍然很难看,并且可能会对通知窗口进行一些不必要的推断.(将我的窗口置于顶部将隐藏通知窗口.)
谢谢你的时间和建议!
如何让表单显示在桌面上的所有内容上,而不仅仅是应用程序中的表单.我花了很多年的谷歌搜索,但只找到了C++的片段和不再有效的旧版Visual Studio.我知道答案就在那里,我一定在寻找错误的东西.
为了清楚起见 - 我的项目是在Visual Studio 2012中创建的,它是用Visual Basic编写的.
提前致谢.