CMFCButton 类完善WM_CTLCOLOR的不足-设置按钮的各种样式

3478 人浏览 | 时间: 2016-01-19 20:14:12 | 作者: 阿郎
WM_CTLCOLOR消息响应不了按钮的设置,尽管有方法解决,但是比较复杂,其实有一种简单地方法,那就是CMFCButton类。
CMFCButton 选件类添加功能 CButton 选件类(如)对齐按钮文本,将按钮文本和图像,选择光标和指定工具提示。CMFCButton的可定制性非常高,包括背景颜色、图片、按钮字体、字体颜色、字体高亮颜色、鼠标指针....具体可查MSDN。但是CMFCButton得代码没写好的话,容易造成内存泄露,具体的你可以自己查查,这里我只是提下,希望大家注意这个问题。毕竟内存泄露在程序员看来是一个很严重而又常见的问题。但本文的方向不在这里,有兴趣的可以自己研究。
CMFCButton实现出来就是这么一个原理:资源共享。即几个按钮共享同一个ID号,下面的代码也是这么个原理。导入一个位图图片,ID号为IDB_BITMAP

先看看图:

我们在OnInitDialog函数中写入代码:

CMFCButton * button = new CMFCButton; 
	button->Create(_T("Test Button"), 
	WS_VISIBLE, 
	CRect(5, 5, 80, 50), 
	this, 
	IDC_BUTTON1); 
	// 更改文字 
	button->SetWindowTextW(_T("强制更改")); 
	// 更改背景颜色 
	button->SetFaceColor(RGB(153, 217, 234)); 
	// 更改字体颜色 
	button->SetTextColor(RGB(255, 255, 255)); 
	// 更改高亮颜色 
	button->SetTextHotColor(RGB(63, 72, 204)); 
	// 更改位置 
	button->MoveWindow(50, 50, 100, 70); 
	// 鼠标经过时变成手势 
	button->SetMouseCursorHand(); 
	//button->SetMouseCursor();
	// 工具提示 
	button->SetTooltip(_T("俺是提示")); 

	CMFCButton * button1 = new CMFCButton; 
	button1->Create(_T("Test Button"), 
	WS_VISIBLE, 
	CRect(160, 15, 460, 385), 
	this, 
	IDC_BUTTON1); 
	// 加载图片 
	button1->SetImage(IDB_BITMAP1); 
		return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}