




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何在VC中改变控件的背景色在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 hBrush = CreateSolidBrush(COLOR); /COLOR是你想设置的颜色 return (HBRUSH) hBrush; default: /其他控件设置自己默认的颜色和背景刷. return CDialog:OnCtlColor(pDC, pWnd, nCtlColor); 说明:1、 可分别处理以上消息以实现不同控件不同背景色。 2、此方法不适用于按纽控件。 二、通过定制来实现不同颜色按纽。 以下通过定制方形彩色按纽来说明: 第一步:派生出自己的按纽类。 /CcolorButton.h class CColorButton : public CButton DECLARE_DYNAMIC(CColorButton) public: CColorButton(); virtual CColorButton(); BOOL Attach(const UINT nID, CWnd* pParent, const COLORREF BGColor = RGB(192, 123, 192), / 按纽的背景色 const COLORREF FGColor = RGB(1, 1, 1), / 文本颜色 ); 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); 2、 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 += 4; focusRect.right -= 4; focusRect.top += 4; focusRect.bottom -= 4; / 按纽标题 const int bufSize = 512; TCHAR bufferbufSize; 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(255, 255, 255); DrawLine(DC, R.left, R.top, R.left, R.bottom, RGB(255, 255, 255); /以下绘制按纽的外围框线以使按纽有立体感 DrawLine(DC, R.left + 1, R.bottom - 1, R.right, R.bottom - 1, RGB(1, 1, 1); /绘制按纽左框线和上框线 DrawLine(DC, R.right - 1, R.top + 1, R.right - 1, R.bottom, RGB(1, 1, 1); /绘制按纽右框线和下框线 /用色彩填充按纽框 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。 /CColorDlg.h class CColorD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省2025-2026学年高三上学期开学考试语文试题及参考答案
- 河北省承德市丰宁满族自治县2026届化学九年级第一学期期中预测试题含解析
- 肺胀中医护理查房精要
- 2026届内蒙古包头市九原区九年级化学第一学期期中达标检测试题含解析
- 2026届安徽省枞阳县联考化学九上期中监测模拟试题含解析
- 2026届贵州省黔西南兴仁县九上化学期中学业质量监测试题含解析
- 甘肃省天水市罗玉中学2026届九上化学期中复习检测试题含解析
- 2026届重庆市大渡口区化学九上期末综合测试试题含解析
- 知情同意告知培训
- 2026届新疆伊犁州名校化学九上期中经典试题含解析
- 机电一体化设计
- 新教材教科版五年级上册科学 第二单元 地球表面的变化 单元全套课时练
- 职业发展与就业创业指导ppt课件完整版
- 挠度计算模板表格(自动版)
- (中职中专)财经法规与会计职业道德课件完整版电子教案
- 宝钢集团生产安全事故案例汇编
- DB37T 5151-2019 园林绿化工程资料管理规程
- Q∕GDW 11612.43-2018 低压电力线高速载波通信互联互通技术规范 第4-3部分:应用层通信协议
- 贝多芬F大调浪漫曲—小提琴谱(带钢伴谱)
- 压力传感器(课堂PPT)
- (施工方案)场地三通一平施工方案
评论
0/150
提交评论