【发布时间】:2021-12-24 10:26:23
【问题描述】:
我正在尝试找到一种能够在特定窗口上替换 2 种颜色的方法(这不是我制作的,这是另一个问题)。
LONG ExtendedStyle = GetWindowLong(handle,GWL_EXSTYLE );
SetWindowLong(handle,GWL_EXSTYLE,ExtendedStyle | WS_EX_LAYERED );
::SetLayeredWindowAttributes(handle,RGB(251,254,249),0,LWA_COLORKEY);
这很好用,现在我尝试调用两次:
::SetLayeredWindowAttributes(handle,RGB(251,254,249),0,LWA_COLORKEY);
使用不同的颜色代码
LONG ExtendedStyle = GetWindowLong(handle,GWL_EXSTYLE );
SetWindowLong(handle,GWL_EXSTYLE,ExtendedStyle | WS_EX_LAYERED );
::SetLayeredWindowAttributes(handle,RGB(251,254,249),0,LWA_COLORKEY);
::SetLayeredWindowAttributes(handle,RGB(251,254,220),0,LWA_COLORKEY);
这不起作用,只考虑最后一个,我已经进行了广泛的搜索,并希望不要进入太高级的解决方案,因为我的问题看起来很简单。有人知道吗?
编辑:对不起,我对这个 API 很不熟悉,我有一个客户端需要我在一个窗口中替换 2 种颜色(或更多),我已经在这方面浪费了太多时间。非常欢迎您的帮助。谢谢
【问题讨论】:
-
如果您控制有问题的窗口,则需要使用每像素 Alpha 透明度而不是颜色键透明度。如果您不控制窗口,那么您将无能为力。
-
SetLayeredWindowAttributes()一次只支持一种透明色。对于更高级的透明度/半透明需求,您必须改用UpdateLayeredWindow()。 -
感谢您的回复!我已经开始研究 UpdateLayeredWindow 但我不知道如何同时做两种颜色,似乎我可以做一种,然后一种,然后一种(抹去前一种)。我需要在我无法控制的窗口中用 2 种其他颜色替换 2 种颜色。