CCheckListBox 如何改变背景颜色以及字体颜色??? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.geekclaw.com/opensrc/vccleaner.rarrefers to the source code 在界面美化的专题中,MFC类对于界面美化也做了部分的努力,以下是一些可以使用的 自己弄到代码里面试下: 应该有几个是可以的!~ CWinApp::SetDialogBkColor void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) ); 指定对话框的背景色和文本颜色。CListCtrl::SetBkColor CReBarCtrl::SetBkColor CStatusBarCtrl::SetBkColor CTreeCtrl::SetBkColor COLORREF SetBkColor( COLORREF clr ); 设定背景色。CListCtrl::SetTextColor CReBarCtrl::SetTextColor CTreeCtrl::SetTextColor COLORREF SetTextColor( COLORREF clr ); 设定文本颜色。CListCtrl::SetBkImage BOOL SetBkImage( LVBKIMAGE* plvbkImage ); BOOL SetBkImage( HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0); BOOL SetBkImage( LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0 ); 设定列表控件的背景图片。CComboBoxEx::SetExtendedStyle CListCtrl::SetExtendedStyle CTabCtrl::SetExtendedStyle CToolBarCtrl::SetExtendedStyle DWORD SetExtendedStyle( DWORD dwExMask, DWORD dwExStyles ); 设置控件的扩展属性,例如:设置列表控件属性带有表格线。 谢谢,ljh_0728(0728)我问的CListCtrl的表头如何变成扁平形式,其他简单控件都可以背景颜色和文字颜色,但是CHeaderCtrl的DrawItem如何自绘不是太清楚,主要是缺少这方面的知识. 可能我没完全明白你的意思: 不过,要实现自绘,就必须保证:1.你自绘的控件属性设置成了: OWNERDRAWVARIABLE 或 OWNERDRAWFIXED 反正不是NO那个选项就对了, 你在ResourceView中设置该控件的属性时/Styles, 时会看到 Owner draw 那个选项: 不要设成 NO 就对了。 2. 然后在你的控件类(当然是派生于 CCheckListBox) 的类里面实现以下几个函数: virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct); virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct); virtual int VKeyToItem(UINT nKey, UINT nIndex); virtual int CharToItem(UINT nKey, UINT nIndex);当然, 具体的代码你可以 参照 CListBox: DrawITEM 的例子完全拷贝过来! 然后就能看到效果了! 3. 重点的看: DrawItem 里面的设置,就能看到 自绘效果了 (当然其他几个 virtual 函数也要实现的) 多试试! 应该可以解决的! 再给楼主补充下: 如果你所在的 CCheckListBox 是在一个dlg类中的成员:那么很好 处理!响应这个类dlg类的 WM_CTLCOLOR 消息 就会生成: HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数 你再看看MSDN的该函数的例子(看我下面的也成 ): 很好理解也很好实现:! HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here //if (nCtlColor == CTLCOLOR_STATIC) if (pWnd->GetDlgCtrlID() == IDC_LIST1) // 这里 IDC_LIST1 是你的控件的ID { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,255,0)); //此处设置字体的颜色 return (HBRUSH)m_brush.GetSafeHandle(); } // TODO: Return a different brush if the default is not desired return hbr;} 矩形拟合 HELP 请帮忙提供思路:socket & ftp 检测当前运行环境是虚拟机下还是在什么下面运行的 完整代码却调不通,郁闷~~~ 好心人进来帮帮我. 用c++读取3DMAX文件中的点问题。紧急求救 网络广告软件 关于dll和exe程序运行中当前目录的问题 关于WS_CHILD和WS_POPUP引起的界面问题 如何在工程中嵌入ACCESS 钩子问题,大家来帮我看看 关于裁减区域:GetClipBox及重绘效率问题 怎样去掉公共对话框标题栏
refers to the source code
MFC类对于界面美化也做了部分的努力,以下是一些可以使用的
自己弄到代码里面试下: 应该有几个是可以的!~
CWinApp::SetDialogBkColor void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) ); 指定对话框的背景色和文本颜色。CListCtrl::SetBkColor CReBarCtrl::SetBkColor CStatusBarCtrl::SetBkColor CTreeCtrl::SetBkColor COLORREF SetBkColor( COLORREF clr ); 设定背景色。CListCtrl::SetTextColor CReBarCtrl::SetTextColor CTreeCtrl::SetTextColor COLORREF SetTextColor( COLORREF clr ); 设定文本颜色。CListCtrl::SetBkImage BOOL SetBkImage( LVBKIMAGE* plvbkImage ); BOOL SetBkImage( HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0); BOOL SetBkImage( LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0 ); 设定列表控件的背景图片。CComboBoxEx::SetExtendedStyle CListCtrl::SetExtendedStyle CTabCtrl::SetExtendedStyle CToolBarCtrl::SetExtendedStyle DWORD SetExtendedStyle( DWORD dwExMask, DWORD dwExStyles ); 设置控件的扩展属性,例如:设置列表控件属性带有表格线。
我问的CListCtrl的表头如何变成扁平形式,其他简单控件都可以背景颜色和文字颜色,
但是CHeaderCtrl的DrawItem如何自绘不是太清楚,主要是缺少这方面的知识.
1.你自绘的控件属性设置成了: OWNERDRAWVARIABLE 或 OWNERDRAWFIXED 反正不是NO那个选项就对了, 你在ResourceView中设置该控件的属性时/Styles, 时会看到
Owner draw 那个选项: 不要设成 NO 就对了。 2. 然后在你的控件类(当然是派生于 CCheckListBox) 的类里面实现以下几个函数: virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
virtual int VKeyToItem(UINT nKey, UINT nIndex);
virtual int CharToItem(UINT nKey, UINT nIndex);
当然, 具体的代码你可以 参照 CListBox: DrawITEM 的例子完全拷贝过来! 然后就能看到效果了! 3. 重点的看: DrawItem 里面的设置,就能看到 自绘效果了 (当然其他几个 virtual 函数也要实现的) 多试试! 应该可以解决的!
如果你所在的 CCheckListBox 是在一个dlg类中的成员:那么很好 处理!
响应这个类dlg类的 WM_CTLCOLOR 消息 就会生成:
HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数
你再看看MSDN的该函数的例子(看我下面的也成 ):
很好理解也很好实现:!
HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
//if (nCtlColor == CTLCOLOR_STATIC)
if (pWnd->GetDlgCtrlID() == IDC_LIST1) // 这里 IDC_LIST1 是你的控件的ID
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,255,0));
//此处设置字体的颜色
return (HBRUSH)m_brush.GetSafeHandle();
} // TODO: Return a different brush if the default is not desired
return hbr;
}