问题标签 [animatewindow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - AnimateWindow() 在高 dpi 上错误地绘制背景 (Win10)
我正在创建一个简单的 Win32/MFC 应用程序,它有一个主窗口和一个AnimateWindow()
用于显示(向上滑动)和隐藏(向下滑动)窗口的子窗口。当以 100% dpi 缩放运行应用程序时,一切正常。
我已经重写WM_ERASEBKGND
以呈现随机红色,以展示效果。随着窗口在动画的每个“步骤”上向下滑动(隐藏),背景的“更新矩形”被重新绘制,正是子窗口消失的位置,并且背景再次变得可见。
但是,当通过 Windows 设置更改 dpi 缩放(在本例中为 125%)时,会重新绘制不正确的区域。看起来好像传入的区域OnEraseBkgnd()
仍在使用 100% dpi 缩放大小,但位置也关闭了:似乎左上角的 x/y 位置是在屏幕空间而不是客户端中传递的-空间。因此,重绘区域看起来会有所不同,具体取决于窗口在屏幕上的位置。
白色区域是子窗口实际放置的位置,也是背景重绘实际发生的位置。
我已经在 Win10(1803 和 1809)和 Win8.1 上确认了这种影响这是操作系统中的错误,还是我可以做些什么来避免这个问题 - 除了不使用AnimateWindow()
?ShowWindow()
(带SW_SHOW
或SW_HIDE
)工作得很好,顺便说一句。
更新:添加了完整的源代码以重现该问题。根本不使用 dpi-aware manifest 时会出现此问题,但使用时也会出现此问题<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
c++ - AnimateWindow API 隐藏树叶轨迹
我AnimateWindow
用来显示/隐藏我的工具栏。在隐藏期间,工具栏会留下痕迹,几秒钟后它会消失。如何在隐藏期间消除这些痕迹?
c++ - 创建可褪色子窗口的策略
我正在尝试创建一个支持淡入和淡出的窗口类,即使对于子窗口也是如此。基本上,它将WS_EX_LAYERED
样式添加到窗口,然后调用SetLayeredWindowAttributes
计时器,逐渐改变 alpha 值。
这种方法是可以的,但是如果有更高优先级的消息通过线程的消息队列,那么褪色当然会暂时中断。因此,例如,如果某处发生了一些调整大小的事件,淡出将减慢或暂时停止。
我想知道是否有某种策略可以避免这种情况。到目前为止,我唯一的解决方案是在自己的线程上创建可褪色的窗口,因此计时器消息不会被任何东西打断。该解决方案是可行的,但它确实增加了一些额外的线程复杂性,所以我希望尽可能避免它。感谢您的任何意见。