填充Rectangle类型的PictureBox,C ++ WINAPI

时间:2013-12-17 07:56:09

标签: c++ winapi picturebox

我正在重新创建一个模仿Windows颜色编辑对话框(即来自Paint)的应用程序,用于研究目的。
http://i.stack.imgur.com/UGdtU.jpg

我创建了一个相同的对话框,使用PictureBox作为“颜色容器”。 我将PictureBox类型设置为“Rectangle”,我认为使用LOGBRUSH填充Rectangle对象会更容易;而不是将PictureBox设置为键入“位图”并将位图的每个像素设置为必要的颜色。

我遇到的问题是......我不知道如何使用带有LOGBRUSH的PictureBox控件的HWND来填充它。

我无法找到与控件通信的PictureBox通知和消息。

有人能告诉我如何正确地与PictureBox控件进行通信吗?

1 个答案:

答案 0 :(得分:1)

使用SS_SIMPLE样式且没有文本的静态控件。然后在父窗口中处理WM_CTLCOLORSTATIC消息。然后,父窗口可以返回系统用于绘制背景的画笔。请记住,除非系统刷子,否则你有责任释放画笔。即如果您使用CreateSolidBrush或类似函数创建了画笔,则需要在不再使用画笔时释放画笔,否则会导致GDI对象泄漏。对于您提议的实现,您可以在初始化对话框时创建一组刷柄,并为特定框提供适当的刷子以响应WM_CTLCOLORSTATIC。当对话框即将销毁时,您可以释放画笔手柄。

另一种实现方法是创建一个自定义控件,它只保存窗口私有数据中数组中各种框的颜色,并手动绘制它们以响应WM_PAINT。