知识大全 如何在VC中改变控件的背景色
Posted 函数
篇首语:不畏过往,不惧将来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何在VC中改变控件的背景色相关的知识,希望对你有一定的参考价值。
如何在VC中改变控件的背景色 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在VC编程中要改变控件(诸如CView CFrameWnd or CWnd等)的背景色可通过处理特定的消息来实现 但如果想改变按钮的颜色 就只能使用自绘制的按钮(也可以用位图按钮 此处未做说明)而不能通过OnCtlColor()改变 一 在一个MFC应用程序中 要改变控件的背景色可通过重载OnCtlColor()函数来实现 方法是在该函数中设置所需颜色后再返回一个画刷句柄便可重绘控件背景色 OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的 常用的此类消息有 CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑框 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滑动条 CTLCOLOR_STATIC 静态文本框 矩形等 以下示例代码说明如何更改以上控件的背景色
//CmyDialog h定义 class CMyDialog : public Cdialog //派生自己的对话框类 …… // Implementation protected: // Generated message map functions //AFX_MSG(CMyDialog) afx_msg HBRUSH OnCtlColor(CDC* pDC CWnd* pWnd UINT nCtlColor); …… //AFX_MSG DECLARE_MESSAGE_MAP() ; //CmyDialog cpp 定义 …… HBRUSH CMyDialog::OnCtlColor(CDC* pDC CWnd* pWnd UINT nCtlColor) switch (nCtlColor) case CTLCOLOR_EDIT: case CTLCOLOR_MSGBOX: case CTLCOLOR_DLG : case CTLCOLOR_EDIT : //在此加入你想要改变背景色的控件消息 pDC >SetBkMode(TRANSPARENT); HBRUSH B = CreateSolidBrush(COLOR); //COLOR是你想设置的颜色 return (HBRUSH) B; default: //其他控件设置自己默认的颜色和背景刷 return CDialog::OnCtlColor(pDC pWnd nCtlColor);
说明 可分别处理以上消息以实现不同控件不同背景色 此方法不适用于按纽控件 二 通过定制来实现不同颜色按纽 以下通过定制方形彩色按纽来说明 第一步 派生出自己的按纽类
//CcolorButton h class CColorButton : public CButton DECLARE_DYNAMIC(CColorButton) public: CColorButton(); virtual ~CColorButton(); BOOL Attach(const UINT nID CWnd* pParent const COLORREF BGColor = RGB( ) // 按纽的背景色 const COLORREF FGColor = RGB( ) // 文本颜色 ); protected: virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); //重定义虚拟函数DrawItem void DrawFrame(CDC *DC CRect R); //绘制按纽框 void DrawFilledRect(CDC *DC CRect R COLORREF color); //填充按纽框 void DrawLine(CDC *DC CRect EndPoints COLORREF color); void DrawLine(CDC *DC long left long top long right long bottom COLORREF color); void DrawButtonText(CDC *DC CRect R const char *Buf COLORREF TextColor); //绘制按纽上的文本 COLORREF GetFGColor() return m_fg; COLORREF GetBGColor() return m_bg; private: COLORREF m_fg m_bg; ; #endif
第二步 定义各函数
//CcolorButton cpp …… // CColorButton IMPLEMENT_DYNAMIC(CColorButton CButton) CColorButton::CColorButton() CColorButton::~CColorButton() //定义Attach()函数 BOOL CColorButton::Attach(const UINT nID CWnd* pParent const COLORREF BGColor const COLORREF FGColor) if (!SubclassDlgItem(nID pParent)) return FALSE; m_fg = FGColor; m_bg = BGColor; return TRUE; //重载DrawItem() void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS) CDC* pDC = CDC::FromHandle(lpDIS >hDC); UINT state = lpDIS >itemState; CRect focusRect btnRect; focusRect CopyRect(&lpDIS >rcItem); //按纽的选中虚线框 btnRect CopyRect(&lpDIS >rcItem); // 设置表示按纽被选中的虚线框 focusRect left += ; focusRect right = ; focusRect top += ; focusRect bottom = ; // 按纽标题 const int bufSize = ; TCHAR buffer[bufSize]; GetWindowText(buffer bufSize); // 绘制并标志按纽 DrawFilledRect(pDC btnRect GetBGColor()); DrawFrame(pDC btnRect); DrawButtonText(pDC btnRect buffer GetFGColor()); // 如果按纽处于选中状态则在其上绘制选中虚线框 if (state & ODS_FOCUS) DrawFocusRect(lpDIS >hDC (LPRECT)&focusRect); void CColorButton::DrawFrame(CDC *DC CRect R) //绘制按纽 用户通过定制该函数可实现不同形状的按纽 DrawLine(DC R left R top R right R top RGB( )); DrawLine(DC R left R top R left R bottom RGB( )); //以下绘制按纽的外围框线以使按纽有立体感 DrawLine(DC R left + R bottom R right R bottom RGB( )); //绘制按纽左框线和上框线 DrawLine(DC R right R top + R right R bottom RGB( )); //绘制按纽右框线和下框线 //用色彩填充按纽框 void CColorButton::DrawFilledRect(CDC *DC CRect R COLORREF color) CBrush B; B CreateSolidBrush(color); DC >FillRect(R &B); // DrawLine用于绘制按纽 其为多态函数 void CColorButton::DrawLine(CDC *DC CRect EndPoints COLORREF color) …… void CColorButton::DrawLine(CDC *DC long left long top long right long bottom COLORREF color) …… //绘制按纽文本 void CColorButton::DrawButtonText(CDC *DC CRect R const char *Buf COLORREF TextColor) COLORREF prevColor = DC >SetTextColor(TextColor); DC >SetBkMode(TRANSPARENT); DC >DrawText(Buf strlen(Buf) R DT_CENTER|DT_VCENTER|DT_SINGLELINE); DC >SetTextColor(prevColor);
第三步 引用定制类 定制任意对话框CColorDlg 在其上画一按键控件 ID为IDOK
cha138/Article/program/net/201311/11539相关参考
知识大全 鼠标移到GridView某一行时改变该行的背景色方法
鼠标移到GridView某一行时改变该行的背景色方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
VB中如何修改treeview的背景色 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!改变TreeV
知识大全 VC控件 TreeCtrl 与 ListCtrl 演示
VC控件TreeCtrl与ListCtrl演示 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
使用VC.net轻松实现按钮控件自绘 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用&nbs
目前Java的drawString()方法缺省地使用当前Graphics对象的背景颜色作为文字的背 景颜色并且不提供专门的方法来改变这种设置因此我们不能够直接画出具有不 一样背景的文字一个
在GridView中鼠标滑过时改变背景颜色 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Gr
什么软件可以在mp3中添加背景音乐,怎样在软件里添加背景音乐一.在程序中直接播放声音文件在VC++中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音
知识大全 css中,如果一个图片上有字但是背景是白色的,不想要背景色,只显示字怎么做
css中,如果一个图片上有字但是背景是白色的,不想要背景色,只显示字怎么做?各位大神,帮帮忙用CSSbackground:transparent;属性设置背景透明补充:哦不好意思看错题目了,现在好像暂
脚本源代码<body><style>bodybackgroundcolor:##allwidth:px;height:px;backgroundcolor:#FFFFFF;ov
知识大全 JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
JavaScript操作table,可以新增行和列并且隔一行换背景色代码分享 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让