如何获得窗口的颜色

时间:2012-09-17 09:22:12

标签: c++ winapi gdi

我正在尝试使用API​​ GetBkColor和GetSysColor(COLOR_WINDOW)来获取窗口的颜色,但它给了我错误的值。 当我通过使用某种工具获得wndow的颜色时,它与我从API获得的颜色不同。

有关如何获得正确的颜色值的任何建议吗?

如果窗口使用渐变颜色,那么如何在特定像素处找到颜色?

2 个答案:

答案 0 :(得分:2)

GetBkColor在成功时返回当前背景颜色的COLORREF值。要获取颜色的红色,绿色和蓝色组件,请分别使用GetRValue,GetGValue和GetBValue宏。那你需要什么?或者你的意思是什么样的“正确价值”?

要获得像素颜色,请使用GetPixel功能:

COLORREF color;
HDC hdc_ = GetDC(NULL); //get dc of whole screen
color = GetPixel(hdc_, x, y);

希望这会以某种方式帮助你。

答案 1 :(得分:0)

GetBkColor告诉您文本的当前背景颜色,但窗口可能会在绘制时更改它,因此这不会为您提供值。

在给定当前颜色方案的情况下,

GetSysColor(COLOR_WINDOW)是窗口的推荐默认颜色,但许多窗口选择不同的颜色。您可以尝试获取窗口的WNDCLASS并检查hbrBackground字段,但并非所有窗口都依赖该机制来设置其背景颜色。

要获取特定像素的颜色,您可以使用GetPixel。这对于几个像素的采样是很好的,但是不要试图通过调用这个数字来读取窗口中的每个像素 - 它太慢了。