【发布时间】:2009-06-12 23:03:01
【问题描述】:
嗯,我有点想在窗户上有一种淡淡的条纹图案……只是,因为它看起来不错。无论如何,我知道我可以制作一个阴影画笔,如下所示:
window with red stripes on white background http://www.cityaftersix.ca/uploads/windowpattern.png
但是,我只能设置前景色,不知道如何使背景不为白色(只使用默认的窗口颜色)。我在 MSDN 上四处寻找,试图弄清楚如何绘制一个位图,它使用默认背景颜色和稍暗的前景色来穿过窗口的背景。我该怎么做?请注意,我在 emacs 中工作,在 C 中——我没有像资源编辑器或类似的东西......我将在纯 C 中添加它。
有人知道这是怎么做到的吗?
我希望我可以用代码绘制一个简单的 5x5 位图——这样每次绘制时都使用COLOR_BACKGROUND。有没有办法得到COLOR_BACKGROUND,把那个颜色变暗,然后复制成新的颜色?
好的,好的,我做到了
稍后我会重新发布我的解决方案作为答案,但问题有点奇怪:
我对GetSysColor(COLOR_BTNFACE); 的调用以0x00BBGGRR 的格式返回COLORREF,而CreateBitmap(); 将其解释为0x00RRGGBB... 我的意思是,我只是交换了红色和蓝色字节,但有什么办法是为了避免这种字节顺序混乱还是只是 Windows 的一个怪癖?
另外,如何将这个画笔绘制到静态控件上?
【问题讨论】:
-
英特尔是小端平台,你是来自大端的环境吗?也许这解释了混乱?
-
不,这一切都只是在我的 Windows XP 笔记本电脑上......似乎一个函数将 RGB 值的顺序与另一个函数读取它们的顺序不同。如果这是系统字节序的问题,不是 0x00RRGGBB 还是 0xBBGGRR00?或 0x00BBGGRR / 0xRRGGBB00
-
我认为 CreateBitmap 创建了一个依赖于设备的位图 - 位在内存中的布局格式取决于设备驱动程序。您可能想使用 CreateDIBSection 创建一个与设备无关的位图 - 您可以安全地编辑 DIB,而无需了解实现细节
-
感谢您的提示,我会调查一下——但是使用 CreateBitmap 会遇到什么麻烦?我只是创建一次然后在各处绘制它......虽然我认为一个实现细节是位图数据必须是字对齐的......这在某些系统上可能会有所不同吗?嗯……
标签: c user-interface winapi