颜色设置 OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 的用法

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:

afx_msg HBRUSH OnCtlColor(

   CDC* pDC,

   CWnd* pWnd,

   UINT nCtlColor

);

参数分析:

pDC     包含了子窗口的显示设备环境的指针。可能是临时的。

pWnd     包含了要求颜色的控件的指针。可能是临时的。

nCtlColor  包含了下列值,指定了控件的类型:

· CTLCOLOR_BTN       按钮控件

· CTLCOLOR_DLG     对话框

· CTLCOLOR_EDIT     编辑控件

· CTLCOLOR_LISTBOX  列表框控件

· CTLCOLOR_MSGBOX  消息框

· CTLCOLOR_SCROLLBAR   滚动条控件

· CTLCOLOR_STATIC   静态控件

 返回值:

  返回一个句柄是控制背景的画刷

备注:

 

 

个人使用

添加私有变量 BRUSH m_brush,之后

重载WM_CTLCOLOR消息的响应函数

【程序实现】

1.假设你有一个CTextDialog, 你有了一个STATIC的控件,ID为IDC_STATIC1

 

HBRUSH CTextDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	if (nCtlColor==CTLCOLOR_STATIC)

	{    
		pDC-> SetTextColor(RGB(255,0,0)); //字体颜色
		pDC-> SetBkColor(RGB(0, 0, 255)); //字体背景色

	}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}

 

备注:

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH:透明

TRANSPARENT :透明

 

 待完善

http://msdn.microsoft.com/en-us/library/0wwk06hc%28v=VS.80%29.aspx

http://blog.sina.com.cn/s/blog_7d1dc9de010115uu.html

 

 

原文地址:https://www.cnblogs.com/gaoquanning/p/3028317.html