CStatic自定义控制

时间:2009-07-30 23:13:17

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

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

我最初只使用CStatic样式的SS_BLACKRECT控件。这对情况有好处,直到我需要在控件上按需显示图像。

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

基本上我希望控件在大多数情况下以CStatic样式作为普通SS_BLACKRECT运行。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

以下是一些想法:

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

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