0

我正在尝试创建一个自定义控件CStaticvc++遇到一些问题。

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

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

基本上,我希望控件在大多数情况下都能正常CStatic使用该SS_BLACKRECT样式。

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

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

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

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

4

2 回答 2

1

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

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

于 2009-08-02T22:21:01.960 回答
0

这里有几个想法:

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

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

于 2009-07-31T00:39:40.573 回答