通过 WM_CTLCOLOR 设置VC 组合框显示属性(字体、颜色、背景)


在mfc中的对话框里使用组合框控件的时候,在没有重写CComboBox类的情况下,可以通过对话框的 WM_CLTCOLOR 消息的响应函数 OnCtlColor 设置组合框的一些显示特性,包括字体的设置、字体颜色的设置、背景颜色的设置、显示文本部分的背景颜色的设置,同时,这些设置有可以分别针对组合框中的编辑框、组合框中的列表框、组合框只读时的静态文本框(组合框的构成就是这三个部分)。

参考代码:(组合框类型为Dropdown)


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

	// TODO:  在此更改 DC 的任何特性
	// 如果不需要设置背景颜色,可以加上语句:pDC->SetBkMode(TRANSPARENT);
	// 只读组合框中编辑框的静态文本框背景设置
	if (nCtlColor == CTLCOLOR_STATIC &&
		(pWnd->GetParent()->GetDlgCtrlID() == m_combox1.GetDlgCtrlID()))
	{  
		CFont font;
		font.CreatePointFont(160, _T("微软雅黑"));
		pDC->SelectObject(&font);
		pDC->SetTextColor(m_clrReadOnlyCombEditText);
		pDC->SetBkColor(m_clrReadOnlyCombEditTextBg);
		//pDC->SetBkMode(TRANSPARENT);
		return (HBRUSH) m_brushReadOnlyCombEditBg; //返回背景画刷句柄
	} 


	// 组合框中的编辑框
	if (nCtlColor == CTLCOLOR_EDIT  
		&& pWnd->GetParent()->GetDlgCtrlID() == m_combox1.GetDlgCtrlID())  
	{  
		CFont font;
		font.CreatePointFont(130, _T("微软雅黑"));
		pDC->SelectObject(&font);
		pDC->SetTextColor(m_clrCombEditText);
		pDC->SetBkColor(m_clrCombEditTextBg);
		//pDC->SetBkMode(TRANSPARENT);
		return (HBRUSH) m_brushCombEditBg; //返回背景画刷句柄
	} 

	// 组合框中的列表框
	if (nCtlColor == CTLCOLOR_LISTBOX  
		&& m_combox1.GetParent()->GetDlgCtrlID() == pWnd->GetParent()->GetDlgCtrlID())  
	{  
		CFont font;
		font.CreatePointFont(150, _T("楷体"));
		pDC->SelectObject(&font);  
		pDC->SetTextColor(m_clrCombListText);
		pDC->SetBkColor(m_clrCombListTextBg);
		return (HBRUSH) m_brushCombListBg ; //返回背景画刷句柄
	}

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



另外,需要将Dropdown类型的组合框设置为只读,可以通过获取组合框中编辑框的指针,然后调用系统函数设置:

::CWnd *pWnd = m_combox1.GetWindow(GW_CHILD);
	while(pWnd)
	{
		TCHAR classname[256];
		::GetClassName(pWnd->m_hWnd, classname, 256);
		if(lstrcmpi(classname, _T("Edit")) == 0)
			break;
		if(pWnd)
			pWnd = pWnd->GetNextWindow();
	}
	CEdit *pEdit = (CEdit*)pWnd;
	pEdit->SetReadOnly();


组合框控件的一个函数 SetFont 设置的字体相当于它的编辑框的字体,组合框的高度也可以通过 SetItemHeight 函数来设置,当第1个参数为-1时设置的是它的编辑框的高度,当第1个参数为1时设置的是它的列表框的宽度。
通过上面的这些操作,在不重载组合框类的情况下,也已经可以设计出显示效果不错的组合框了。



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值