WS_EX_TOOLWINDOW 可能导致的窗口无响应问题

最近在写一个Direct2D的透明窗口,目的就是透明窗口上画字,然后改在游戏表面当字幕用
开始用的GDI和GDI+方案效果都不怎么样,Direct2D好很多,自由控制alpha

大概方案就是,创建内存DC,然后用Direct2D的DC绘制,最后用UpdateLayeredWindow

不过正当我准备收工的时候,发现这个东西在vs的debug下运行,无论是release还是debug都是正常的
但是一旦直接运行exe程序,就会出现很快卡死的情况。特别是在运行的时候打开任务管理器,百分百卡死。

也尝试过虚拟机Windows8.1 、10运行都是一个情况,所以排除系统问题。

通过打印绘制函数,发现,应该只是窗口卡死而已,内部的绘制函数还是在运行的,而且窗口的内容也还是在实时变换的。

最后排查下来,发现是窗口的拓展属性问题,

问题的属性 WS_EX_LAYERED | WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW,

正常的属性 WS_EX_LAYERED | WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE,

就是把 WS_EX_TOOLWINDOW 换成 WS_EX_NOACTIVATE

这两个属性都有个功能就是把窗口在任务栏的图标隐藏了,不过用 WS_EX_TOOLWINDOW  就会卡死。

 

posted @ 2023-07-08 23:58  Dir-A  阅读(244)  评论(0编辑  收藏  举报