【C++】自绘控件基础

因为咱们对控件的功能、外观的需求,公共控件并不能很好地知足这一点,因此咱们就得自绘控件。框架

自绘控件有许多方法,好比:处理WM_PAINT消息设置ownDraw风格,处理WM_CTLCOLOR消息,函数

以前见过有网友发表过自定义绘制的方法,但目前我只了解前面这几个方法,往后有机会再补充。spa

处理WM_PAINT消息设计

个应该是最容易想到的方法。在windowProc()函数中处理WM_PAINT消息,这可能出现一些杂事,好比创设备上下文,决定控件的位置等。这理就不详细解释,具体能够看《window程序设计》。code

设置ownDraw风格
ci

这个方法也就是全部者绘制方法。它是用于开发自定义控件最普通的技术,由于在呈现控件的那一刻,Windows就已经填写了设备上下文,决定控件大小和位置等,没必要像处理WM_PAINT消息那样什么都要自已过一遍。开发

这个方法是要重载DrawItem()函数,函数注意与OnDrawItem()区分开。当咱们重载DrawItem()函数时,它是在它的宿主类的OnDrawItem()中被调用的。it

咱们能够在PreSubclassWindow()函数中设置控件的BS_OWNERDRAW属性,不过这会去掉其它的属性。程序设计

好比自绘一个CMyButton:class

void CMyButton::PreSubclassWindow()
{
	CButton::PreSubclassWindow();  

	ModifyStyle(0, BS_OWNERDRAW);   
}

处理WM_CTLCOLOR消息

 

个方法只提供改变控件的颜色,而且不提供控件自己以外的更多功能。

与消息对应的OnCtlColor()函数,其返回值是一个刷子句柄,该刷子将被用于画出控件的背景。当要画出一个子控件时,框架就调用这个成员函数。

其类别有以下几种:

CTLCOLOR_BTN 按钮控件
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滚动条
CTLCOLOR_STATIC 静态文本

相关文章
相关标签/搜索