c++ - 填充矩形类型的 PictureBox,C++ WINAPI

标签 c++ winapi picturebox

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

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

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

我在查找与控件通信的 PictureBox 通知和消息时遇到了问题。

谁能给我一些关于如何与 PictureBox 控件正确通信的见解?

最佳答案

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

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

关于c++ - 填充矩形类型的 PictureBox,C++ WINAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628778/

相关文章:

c++ - 如何使用 gdbus-codegen 注释带有 org.gtk.GDBus.C.ForceGVariant 的 xml 文件

java - JNI 为什么不能将jintArray 视为[I 而不是Ljava/lang/Object?

c - 如何以 user32.dll(又名 stdcall?)方式声明 DLL?

vb.net - 是否可以在 VB.NET 中设置 PictureBox 的图像对齐方式?

c# - 在图片盒中绘制颜色?

c++ - Qt 禁用 Windows 10 游戏栏

c++程序输出一系列数字而不是cout

c++ - 如何从注入(inject)的 DLL 中获取程序窗口?

windows - 我可以创建一个设备上下文,它只是另一个设备上下文的一部分吗?

c# - 如何检索 WinForms PictureBox 的缩放系数?