当前位置:C++技术网 > 资讯 > DrawFrameControl函数创建自定义的按钮控件

DrawFrameControl函数创建自定义的按钮控件

更新时间:2016-01-23 17:05:45浏览次数:1+次

这段时间一直在研究控件,主要是创建控件,修改控件背景。脑子很乱,今天就总结一篇创建控件并修改控件背景的文章。我们创建控件的时候,用的比较多的应该是控件类的实例化对象来创建控件,这种方法好是好,但是很难修改控件的背景(主要是按钮控件)。在win32里面有WM_CTLCOLORBTN消息来绘制控件,我试了下MFC,好像是没有这个消息来修改控件。之前还想过presubclass来实现,修改按钮,也查了很多资料,查完之后,给我一个感觉就是,坑!很多文章资料都是抄了别人的,然后自己转发,而且理论说的很溜,但就是没有实践实例,我也算是无语了。哎.....

我们利用CDC类的DrawFrameControl函数来绘制控件,而且能够修改控件的颜色等。

BOOL DrawFrameControl(   
LPRECT lpRect,   
UINT nType,   
UINT nState );
参数说明:
lpRect :矩形
nType :控件类型
nState :控件状态
下面是最后两个参数可以引用的值:
#define DFC_CAPTION             1
#define DFC_MENU                2
#define DFC_SCROLL              3
#define DFC_BUTTON              4
#if(WINVER >= 0x0500)
#define DFC_POPUPMENU           5
#endif /* WINVER >= 0x0500 */

#define DFCS_CAPTIONCLOSE       0x0000
#define DFCS_CAPTIONMIN         0x0001
#define DFCS_CAPTIONMAX         0x0002
#define DFCS_CAPTIONRESTORE     0x0003
#define DFCS_CAPTIONHELP        0x0004

#define DFCS_MENUARROW          0x0000
#define DFCS_MENUCHECK          0x0001
#define DFCS_MENUBULLET         0x0002
#define DFCS_MENUARROWRIGHT     0x0004
#define DFCS_SCROLLUP           0x0000
#define DFCS_SCROLLDOWN         0x0001
#define DFCS_SCROLLLEFT         0x0002
#define DFCS_SCROLLRIGHT        0x0003
#define DFCS_SCROLLCOMBOBOX     0x0005
#define DFCS_SCROLLSIZEGRIP     0x0008
#define DFCS_SCROLLSIZEGRIPRIGHT 0x0010

#define DFCS_BUTTONCHECK        0x0000
#define DFCS_BUTTONRADIOIMAGE   0x0001
#define DFCS_BUTTONRADIOMASK    0x0002
#define DFCS_BUTTONRADIO        0x0004
#define DFCS_BUTTON3STATE       0x0008
#define DFCS_BUTTONPUSH         0x0010

#define DFCS_INACTIVE           0x0100
#define DFCS_PUSHED             0x0200
#define DFCS_CHECKED            0x0400

#if(WINVER >= 0x0500)
#define DFCS_TRANSPARENT        0x0800
#define DFCS_HOT                0x1000
#endif /* WINVER >= 0x0500 */

#define DFCS_ADJUSTRECT         0x2000
#define DFCS_FLAT               0x4000
#define DFCS_MONO               0x8000
在OnPaint函数中写代码:
		CDC *pDC=GetDC();
		COLORREF Color = RGB(0, 0, 255);  
	        CRect rect(10, 10, 70, 40);//定义矩形大小  
		pDC->DrawFrameControl(rect,DFC_BUTTON,DFCS_BUTTONPUSH); 	
		//pDC->FillSolidRect(&rect,RGB(255,0,255));
		pDC->SetTextColor(Color);    //字体颜色可更改  
		pDC->SetBkMode(TRANSPARENT);  
		pDC->TextOutW(18,18,L"测试");  
运行结果: