C++ CStatic自定义控件

C++ CStatic自定义控件,c++,inheritance,visual-c++,gdi,ownerdrawn,C++,Inheritance,Visual C++,Gdi,Ownerdrawn,我试图在vc++中创建一个自定义CStatic控件,但遇到了一些问题 我最初只是使用CStatic控件和SS_BLACKRECT样式。在我需要按需在控件上显示图像之前,这对情况非常有利 我弄明白了所有的逻辑,实际上是把图像绘制到控件上,但我似乎不知道如何在不干扰其他事情的情况下做到这一点 基本上,我希望控件在大多数情况下都能像正常的CStatic一样使用SS_BLACKRECT样式 然后我需要能够调用一个方法,使其在控件上绘制图像。我正在使用GDI进行绘图,并且在OnPaint()方法和Draw

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

我最初只是使用
CStatic
控件和
SS_BLACKRECT
样式。在我需要按需在控件上显示图像之前,这对情况非常有利

我弄明白了所有的逻辑,实际上是把图像绘制到控件上,但我似乎不知道如何在不干扰其他事情的情况下做到这一点

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

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

我需要能够让它画得像正常的一样,但只需要在上面放一张图片。当我尝试在
DrawItem()
方法中进行绘制时,我遇到了一个问题,因为它显然不是使用
SS_BLACKRECT
样式绘制的,而是等待我像它应该的那样绘制控件

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

最后一个可能是最简单的,但我不知道绘制
CStatic
控件(如默认的DrawItem)所需的所有设置

这里有几个想法:

如果
CStatic::OnPaint()
在图像上绘制,请尝试先调用它,然后再绘制图像

否则,从我对SS_BLACKRECT的了解来看,您应该能够复制它的绘图,只需调用
CDC::FillSolidRect()
传递通过
GetClientRect()
获得的控件矩形,并使用
GetSysColor(color\u WINDOWFRAME)

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


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

您找到解决方案了吗?