我正在写一个Win7桌面应用程序,并希望从窗口到窗口 – 全屏(反之亦然)无缝过渡,并且主要通过调用SetwindowLongPtr来更新其样式,随后MoveWindow更新其大小和位置。 问题是窗口闪烁一帧显示其风格更新,但新的大小和位置不显示。 下一帧一切看起来正确,但我试图避免这个单帧神器。
我已经尝试颠倒我称之为API的顺序,但它只是改变了工件的外观。 我也尝试隐藏窗口,调用API,然后显示窗口,但这只是导致窗口消失的一帧。
我知道一个select是创build一个具有所需属性的新窗口,然后销毁旧窗口,但我想find一个更便宜的select。
那么有什么办法可以调用这些API,并让它们被视觉上primefacesreflection? 作为一个好处,把多个生成的WM_SIZE消息合并成一个事件也是不错的,但是我可以在消息处理程序中自己pipe理它。
java:点击button打开文件夹
如何使用Anaconda Python执行.py文件?
Windows上的Pocketsphinx-python安装错误
Windows的PHP Imagick不工作
尝试使用任务计划程序(Win7)注册任务时出错
如何获得Windows版本 – 如“Windows 10,版本1607”?
在windows命令行上build立modernizr
在Linux和Windows上的报警function – >无法find一个相当于Windows – > C
用python获得友好的设备名称
在Windows中可靠地完成这样的事情是困难的,特别是因为Vista会使DWM变得复杂。 在找到适合您的解决方案之前,往往是一个反复试验的问题。
SetwindowPos有一个SWP_norEDRAW标志,防止响应该调用重绘窗口。 所以你可以先尝试改变位置,然后更新样式,最后再调用第三个窗口重新绘制窗口。 例如,
SetwindowPos(hWnd,x,y,w,h,SWP_norEDRAW | SWP_NOZORDER); SetwindowLongPtr(hWnd,GWL_STYLE,dwNewStyles); RedrawWindow(hWnd,RDW_INVALIDATE | RDW_FRAME);
MSDN说:
某些窗口数据被缓存,所以使用SetwindowLongPtr所做的更改将不会生效,直到您调用SetwindowPos函数。
所以这应该工作。 也许尝试使用SetwindowPos而不是MoveWindow。
当你得到由这些调用引起的事件时,你在窗口过程中做了什么有趣的事情? 特别是,你是“固定”的大小或类似的东西?
检查出WM_SETREDRAW ; 使用它来禁用重绘,更改窗口样式,然后调用RedrawWindow(hWnd,NULL,RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN)以原子方式显示它们。
“窗口全屏”是什么意思? 这与最大化相同吗?
如果是这样, ShowWindow (hwnd,SW_MAXIMIZE) ?