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 就会卡死。