繁体   English   中英

CStatic自定义控件

[英]CStatic Custom Control

我正在尝试在vc++创建自定义CStatic控件,并且有一些问题。

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

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

基本上,我希望控件大多数时候都可以使用SS_BLACKRECT样式充当普通的CStatic

然后,我需要能够调用将导致该控件在控件上绘制图像的方法。 我正在使用GDI进行绘图,并且已经在OnPaint()方法和DrawItem()方法中尝试了该方法,但DrawItem()成功。 我可以在OnPaint()绘制它,但是当我调用基本CStatic::OnPaint()它将绘制在我的图像上。

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

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

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

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

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

这里有一些想法:

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

否则,从我对SS_BLACKRECT所知不多的地方,您应该能够简单地通过调用CDC::FillSolidRect()传递通过GetClientRect()获得的控件的矩形并使用GetSysColor(COLOR_WINDOWFRAME)返回的颜色来复制它的图形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM