当我的应用程序最大化时,自动隐藏任务栏不出现
时间:2020-03-06 14:45:29 来源:igfitidea点击:
我的应用程序绘制了所有自己的窗口边框和装饰。它可以与设置为自动隐藏的Windows任务栏配合使用,除非将我的应用程序窗口最大化。任务栏不会"向上滚动"。如果我的应用程序未最大化,即使将其尺寸调整到屏幕底部,它也将正常运行。如果我只是调整窗口大小以占据整个显示(即使它已最大化),它甚至可以正常工作。
解决方案
这取决于是否在任务栏属性上选中了"将任务栏保留在其他窗口之上"。如果选中,则会出现任务栏。
但是不要企图仅在最终用户的计算机上以编程方式更改此设置以适应需求,这被认为是不礼貌和不当行为。应用应适合其部署到的任何环境。
我发现了问题。我的应用程序正在处理WM_GETMINMAXINFO消息,并且覆盖了参数MINMAXINFO记录中的值。记录中的值以屏幕像素分辨率的7(边界宽度)为单位进行了放大。这是有道理的,当最大化时,它将窗口的边界推到屏幕的可见部分之外。它还将ptMaxPosition(最大化时将窗口原点设置为点)设置为-7,-7. 我的应用程序将其设置为0,0,并且将最大高度和宽度设置为恰好是屏幕分辨率的大小(未充气)。不知道为什么要这么做;它是由前任写的。如果我注释掉该代码并且不修改MINMAXINFO结构,则自动隐藏有效。
至于原因,我不确定。弹出"自动隐藏"任务栏的检测可能挂接到了处理WM_MOUSEMOVE消息的机制中,而不是WM_NCMOUSEMOVE的机制中。由于我的应用程序使最大化最大化将我的边界停在屏幕底部,因此我将一直在生成WM_NCMOUSEMOVE事件;如果不考虑MINMAXINFO,我将一直在生成WM_MOUSEMOVE。