CStatic自定义控制
-
06-07-2019 - |
题
我正在尝试在 vc ++
中创建自定义 CStatic
控件,并遇到一些问题。
我最初只是使用 SS_BLACKRECT
样式的 CStatic
控件。这对情况有好处,直到我需要在控件上按需显示图像。
我想出了实际将图像绘制到控件上的所有后勤工作,但我似乎无法弄清楚如何在不干扰其他事情的情况下这样做。
基本上我希望控件在大多数时候都能用 SS_BLACKRECT
样式作为普通的 CStatic
。
然后我需要能够调用一个方法,使其在控件上绘制图像。我正在使用 GDI
进行绘图,并且已经在 OnPaint()
方法和 DrawItem()
方法中尝试了它,但没有成功。我可以在 OnPaint()
中绘制它,但是当我调用基础 CStatic :: OnPaint()
时,它会覆盖我的图像。
我需要能够允许它像平常一样绘制,但之后只需将图像放在顶部。当我尝试在 DrawItem()
方法中执行此操作时,我遇到了一个问题,因为显然它不是使用 SS_BLACKRECT
样式绘制,而是等待我绘制控件,就像它应该。
我想我认为我正在寻找的是三件事之一。在基本 OnPaint()
方法完成后,使用 GDI
绘制的方法。一种让控件绘制默认 SS_BLACKRECT
样式然后 OWNERDRAW
之后的图像的方法。或者是模仿 SS_BLACKRECT
绘图的代码。
最后一个可能是最简单的但我不知道我需要设置的所有东西来绘制 CStatic
控件,就像默认的DrawItem一样。
解决方案
尝试在 OnPaint()
处理程序中调用 Default()
。
然后,根据您是否正在绘制图像,您可以在标准 CStatic
控件的顶部绘制。
其他提示
以下是一些想法:
如果 CStatic :: OnPaint()
覆盖您的图片,请先尝试调用它,然后再绘制图像。
否则,从我见过的SS_BLACKRECT,您应该能够复制它的绘图只需调用 CDC :: FillSolidRect()
传递通过获得的控件的矩形GetClientRect()
并使用 GetSysColor(COLOR_WINDOWFRAME)返回的颜色