微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何以primefaces方式更新HWND的风格和位置?

我正在写一个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不工作

如何从Haskell代码跨平台播放audio文件

尝试使用任务计划程序(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) ?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐