【问题标题】:Filling a PictureBox of Type Rectangle, C++ WINAPI填充矩形类型的图片框,C++ WINAPI
【发布时间】:2014-01-04 21:32:56
【问题描述】:

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

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

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

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

谁能告诉我如何与 PictureBox 控件正确通信?

【问题讨论】:

  • 如果我没记错的话应该在 LPCREATESTRUCT 中
  • 你可以试试看控件是否给你发WM_CTLCOLORxxx(可能是WM_CTLCOLORSTATIC)消息。

标签: c++ winapi picturebox


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2015-08-20
    • 2023-03-23
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多