通过 WM_CTLCOLOR 设置VC 组合框显示属性(字体、颜色、背景)
2013-08-05 21:08
791 查看
在mfc中的对话框里使用组合框控件的时候,在没有重写CComboBox类的情况下,可以通过对话框的 WM_CLTCOLOR 消息的响应函数 OnCtlColor 设置组合框的一些显示特性,包括字体的设置、字体颜色的设置、背景颜色的设置、显示文本部分的背景颜色的设置,同时,这些设置有可以分别针对组合框中的编辑框、组合框中的列表框、组合框只读时的静态文本框(组合框的构成就是这三个部分)。
参考代码:(组合框类型为Dropdown)
另外,需要将Dropdown类型的组合框设置为只读,可以通过获取组合框中编辑框的指针,然后调用系统函数设置:
组合框控件的一个函数 SetFont 设置的字体相当于它的编辑框的字体,组合框的高度也可以通过 SetItemHeight 函数来设置,当第1个参数为-1时设置的是它的编辑框的高度,当第1个参数为1时设置的是它的列表框的宽度。
通过上面的这些操作,在不重载组合框类的情况下,也已经可以设计出显示效果不错的组合框了。
参考代码:(组合框类型为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时设置的是它的列表框的宽度。
通过上面的这些操作,在不重载组合框类的情况下,也已经可以设计出显示效果不错的组合框了。
相关文章推荐
- WM_CTLCOLOR设置控件设置背景和字体颜色
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- 通过代码创建UILable,并设置平移旋转字体颜色等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- JavaScript基础 通过style属性设置div的高度,宽度,背景颜色
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置不同的属性:超链接、颜色、字体等属性
- MFC 颜色对话框 字体对话框 WM_CTLCOLOR消息总结
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Flex中如何通过设置GridLines对象的horizontalAlternateFill样式交错显示LineSeries图表背景颜色的例子
- iOS中通过设置CSS改变WebView字体大小,颜色,背景颜色
- MFC 颜色对话框 字体对话框 WM_CTLCOLOR消息总结
- iOS中通过设置CSS改变WebView字体大小,颜色,背景颜色
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Flex Gumbo中如何通过contentBackgroundColor样式,设置TextInput内文本背景颜色