【问题标题】:CStatic Custom ControlCStatic 自定义控件
【发布时间】:2010-11-15 15:27:42
【问题描述】:

我正在尝试在vc++ 中创建自定义CStatic 控件,但遇到了一些问题。

我最初只是使用带有SS_BLACKRECT 样式的CStatic 控件。在我需要在控件上按需显示图像之前,这对这种情况很有用。

我弄清楚了将图像实际绘制到控件上的所有后勤工作,但我似乎无法弄清楚如何在不干扰其他事情的情况下这样做。

基本上,我希望控件在大多数情况下都能像普通的CStatic 一样使用SS_BLACKRECT 样式。

然后我需要能够调用一个方法,让它在控件上绘制图像。我正在使用GDI 进行绘图,并且在OnPaint() 方法和DrawItem() 方法中都尝试过,但均未成功。我可以让它在OnPaint() 中绘制,但是当我调用基础 CStatic::OnPaint() 时,它会覆盖我的图像。

我需要能够让它像平常一样绘制,然后只是在上面放一个图像。当我尝试在 DrawItem() 方法中执行此操作时,我遇到了问题,因为显然它不是使用 SS_BLACKRECT 样式进行绘制,而是在等待我按预期绘制控件。

我想我认为我正在寻找的是三件事之一。一种在基本OnPaint() 方法完成后使用GDI 进行绘制的方法。一种让控件绘制默认SS_BLACKRECT 样式然后OWNERDRAW 之后的图像的方法。或模仿SS_BLACKRECT 绘图的代码。

最后一个可能是最简单的,但我只是不知道像默认 DrawItem 一样绘制 CStatic 控件需要设置的所有内容。

【问题讨论】:

  • 你找到解决办法了吗?

标签: c++ inheritance visual-c++ gdi ownerdrawn


【解决方案1】:

尝试在您的 OnPaint() 处理程序中调用 Default()

然后,根据您是否在绘制图像,您可以在标准 CStatic 控件的顶部进行绘制。

【讨论】:

    【解决方案2】:

    这里有几个想法:

    如果CStatic::OnPaint() 覆盖了您的图像,请尝试先调用它,然后再绘制您的图像。

    否则,根据我对 SS_BLACKRECT 的了解,您应该能够复制它的绘图,只需调用CDC::FillSolidRect() 传递通过GetClientRect() 获得的控件的矩形并使用GetSysColor(COLOR_WINDOWFRAME) 返回的颜色

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2011-07-30
      • 2023-03-27
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多