如何在VC中改变控件的背景色
- 格式:pdf
- 大小:80.50 KB
- 文档页数:8
VC++更改对话框背景色和字体颜色方法一:设置所有窗口的颜色MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);请注意,SetDialogBkColor函数并不是对Windows的某个API 的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。
这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中,添加一行代码就行了,写在domodal()的上一句:SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));注:前一个为背景色,后一个为字体颜色。
方法二:设置当前窗口改变对话框的背景颜色的原理很简单,就是响应WM_ERASEBKGND消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。
改变控件和字体的颜色同理,是响应WM_CTLCOLOR这一消息。
具体操作,方法如下:首先://消息映射BEGIN_MESSAGE_MAP(CHelloDlg, CDialog)//{{AFX_MSG_MAP(CHelloDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_CTLCOLOR() //字体颜色ON_WM_ERASEBKGND() //背景色ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()其次:定义两个函数afx_msg BOOL OnEraseBkgnd(CDC* pDC);afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);第三:重载OnEraseBkgnd和OnCtlColor其中预先定义:protected:CBrush m_brBkgnd;//设置对话框背景色方法一:可以实现(但有点问题)BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CRect rect;GetClientRect(&rect);m_brBkgnd.CreateSolidBrush(RGB(183,213,213)); //背景色pDC->FillRect(&rect,&m_brBkgnd);return TRUE;}方法二:可行BOOL CClientDlg::OnEraseBkgnd(CDC* pDC){CBrush back(RGB(220,215,254));CBrush* pold=pDC->SelectObject(&back);CRect rect;pDC->GetClipBox (&rect);pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);pDC->SelectObject(pold);return TRUE;方法三:也可行BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CBrush MyBrush;MyBrush.CreateSolidBrush(RGB(0,255,0));CBrush *pOldBrush=pDC->SelectObject(&MyBrush);CRect Rect;GetClientRect(&Rect);pDC->Rectangle(&Rect);pDC->SelectObject(pOldBrush);return TRUE;}//设置对话框中控件的字体颜色HBRUSH CHelloDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if(pWnd->GetDlgCtrlID() == IDC_EDIT_MULLINE) //多行edit 控件{pDC->SetT extColor(RGB(13,125,188)); //设置字体颜色return hbr;}else{pDC->SetBkMode(TRANSPARENT);pDC->SetT extColor(RGB(255,125,188));return (HBRUSH)m_brBkgnd; //因为CBrush类实现了HBRUSH 类型转换操作符}。
VisualC++可视化程序MFC设计报告--控件颜⾊设置Visual C++可视化程序设计报告——控件颜⾊设置系别:班级:姓名:学号:⽬录⼀、设计内容介绍 (3)⼆、设计思路⽅法、过程…………3-6三、设计结果⽰范 (6)四、设计⼼得体会 (6)五、附:设计中的关键源程序……7-11⼀、设计内容介绍通过操作滚动条、滑动条和进展条可以调整RGB颜⾊的三个颜⾊分量:R(红⾊分量)、G(绿⾊分量)、B(蓝⾊分量),并根据⽤户指定的颜⾊填充控件。
⼆、设计思路⽅法、过程调整控件颜⾊有很多⽅法,这⾥采⽤简单的⽅法,即通过函数创建填充⾊画刷,使⽤RGB颜⾊宏指定三个分量转换成⼀个32位的RGB颜⾊值,再⽤画刷填充指定的控件。
主要过程⼀、设计对话框1.创建⼀个默认的基于对话框应⽤程序项⽬09120zhangyongce。
将对话框的标题属性改为“控件颜⾊设置”,删除“取消”按钮,并将“确定”按钮标题属性改为“退出”,并新建对话框类Ex_ColorDlg。
2.显⽰对话框⽹络,调整对话框⼤⼩,参照图1所⽰的布局,向对话框添加如表1所⽰的控件。
图1表1(未填的表⽰⽆或默认)3.打开MFC ClassWizard,在Member Variables页⾯中确定class name选中了Ex_Draw,选中所需的控件ID标识符,依次为表2所⽰的控件增加成员变量。
表2⼆、添加成员函数Draw1.⿏标右击CEx_ColorDlg类结点,选择“Add Member Function”,在弹出的“Add Member Function”对话框中Function Type框中输⼊成员函数类型void,在Function Declaration框中输⼊函数声明Draw(UINT nID)。
2.定位在Draw函数,添加函数代码。
三、添加初始化代码1.在CEx_ColorDlg::OnInitDialog中添加代码2.编译运⾏四、完善代码1.⽤MFC ClassWizard在CEx_ColorDlg类中为编辑框IDC_EDIT_R、IDC_EDIT_G、IDC_EDIT_B添加EN_CHANGE的消息映射,使⽤它们的消息映射函数名都设为OnChangeEdit,并添加代码。
一、设置背景颜色的三种方法:1、我们知道程序在运行的时候会调用OnPain函数,那么我们可以在这里设置背景颜色。
void CFlipCardsDlg::OnPaint(){if (IsIconic()){//保持不变}else{CRect rc;GetClientRect( &rc );// 获取客户区CPaintDC dc(this);dc.FillSolidRect(&rc, RGB(0,160,0)); // 填充客户区颜色CDialog::OnPaint();}}2、第二种方法只要一条语句,但是这里要注意这里绘制的颜色是针对程序中所有的对话框(如果是单文档的话,好像不行)SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));// 前一个RGB是背景色,后一RGB是文本颜色该函数放在工程的APP文件的初始化函数中。
3、第三种方法,利用ClassWizard 重载OnCtlColor(),即WM_CTLCOLOR消息在要着色的对话框中申明一个变量,CBRUSH m_hbrush;然后在项目的Dlg类初始化函数中给m_hbrush赋值。
m_brush.CreateSolidBrush(RGB(0, 255, 0));然后在OnCtlColor(...)返回该画刷就可以了,如下。
HBRUSH CFlipCardsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereswitch (nCtlColor){case CTLCOLOR_DLG:HBRUSH aBrush;aBrush = CreateSolidBrush(RGB(0, 150, 0));hbr = aBrush;break;}// TODO: Return a different brush if the default is not desiredreturn hbr;}这样为对话框着色就可以实现了。
一、设计方案及功能描述设置对话框背景颜色有许多种方法,这里采用最简单也是最直接的方法,即通过映射WM_CTLCOLOR(当子窗口将要绘制时发送消息,以便能使用指定的颜色绘制控件)来达到改变背景颜色的目的。
本设计通过滚动条和两个滑动条来调整Visual C++所使用的RGB颜色的三个分量:R、G、B。
二、实现步骤1、创建一个单本文应用程序项目EX_WDX ,运行结果如图所示。
2、向应用程序中添加一个对话框资源IDD_COLOR 、标题定为“调整对话框背景颜色”,字体设为“宋体,9号”,将此对话框类设为CBkColorDlg 。
3、删除原来的Cancel 按钮,将OK 按钮的标题改为“退出”。
4、打开对话框网格,用编辑器为对话框添加如下表所示的一些控件。
添加的控件 ID 号标题 其他属性 水平滚动条IDC_SCROLLBAR_RED————默认滑动条(绿色) IDC_SLIDER_GREEN ———— 默认 滑动条(蓝色)IDC_SLIDER_BLUE————默认5、打开ClassWizard 的Member Variables 页面,在Class name 中选择CBkColorDlg,选中所需控件ID号,双击鼠标或单击Add Variable 按钮。
依次为下列成员添加成员变量。
控件ID 号变量类别变量类型 变量名范围和大小 IDC_SCOLLBAR_RED Control CScrollBar m_scrollRed ———— IDD_SLIDER_GREENControlCSliderCtrlm_sliderGreen ————IDD_SLIDER_GREEN Value int m_nGreen ————IDD_SLIDER_BLUE Control CSliderCtrl m_sliderBlue ————IDD_SLIDER_BULE Value int m_nBlue ————6、为CBkColorDlg添加两个成员变量,一个是int型m_nRedValue,用来设置颜色RGB中的红色分量,另一个是画刷CBrush类对象m_Brush,用来设置对话框背景颜色所需的画刷。
本帖最后由V_John 于2013-12-2 18:59 编辑关于Viual Studio 改变编辑器背景背景及背景图片Visual Studio背景颜色或者背景图片是可以修改的,根据个人的爱好进行相应的修改首先先展示下效果:修改方法如下:1、在工具-扩展和更新-联机,此时他会自动搜索,暂时让他自己搜索去吧,这里介绍4个插件,其中使用2个就可以了(1)、Visual Studio 2012 Color Theme Editor(修改编辑器背景颜色)(2)、ClaudiaIDE (修改编辑器背景图片)(3)、IDE Text Background (修改编辑器背景图片)(4)、Pronama-chan IDE 2012 (修改编辑器背景图片)如果没有搜索到这四个插件,请按照名称具体搜索2、这四个插件下载完毕后(必须联网),就可以设置了(1)、Visual Studio 2012 Color Theme Editor使用方法,安装完毕后,重启Visual Studio ,就会有效果出现(我选择的背景颜色是保护色),选择你喜欢的即可(2)、ClaudiaIDE和Pronama-chan IDE 2012 差不多一样,也是安装完毕后重启Visual Studio,就可以了,只不过这两个背景图片是不可以修改的,而且Pronama-chan IDE 2012背景图片的小人,眼睛会一眨一眨的,挺不错的。
(3)、IDE Text Background 这一种比较特殊,可以修改背景图片,背景图片可以根据图片的多少来自动切换,有一定延时注意:刚安装上IDE Text Background并重启之后,并没有想要的效果,这是为什么?因为这里需要自行设置下图片,没有图片怎么显示图片,对吧,找到“我的文档”下的“MaxZhang.VsixTheme.ini”文件,进行右键编辑“ImageDirectory=D:\Image”,把自己想要显示在编辑器里面的图片,放到”Image”文件夹下即可,他会自动寻找,然后重启编辑器即可。
要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。
这可以通过定义一个以CButton为基类的新按钮类来实现。
以下为具体的实现方法:方法一:加入一个新类,类名:CMyButton,基类:CButton。
在头文件MyButton.h 中加入以下变量和函数定义:private:int m_Style; //按钮形状(0-正常,1-当前,2-按下,3-锁定)BOOL b_InRect; //鼠标进入标志CString m_strText; //按钮文字COLORREF m_ForeColor; //文本颜色COLORREF m_BackColor; //背景色COLORREF m_LockForeColor; //锁定按钮的文字颜色CRect m_ButRect; //按钮尺寸CFont* p_Font; //字体void DrawButton(CDC *pDC); //画正常的按钮// 接口函数public:void SetText(CString str);void SetForeColor(COLORREF color); //设置文本颜色void SetBkColor(COLORREF color); //设置背景颜色void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体在MyButton.cpp 的构造函数中初始化变量:CMyButton::CMyButton(){m_Style = 0; //按钮形状风格b_InRect = false; //鼠标进入标志m_strText = _T(""); //按钮文字(使用默认文字)m_ForeColor = RGB(0,0,0); //文字颜色(黑色)m_BackColor = RGB(243,243,243); //背景色(灰白色)m_LockForeColor = GetSysColor(COLOR_GRAYTEXT); //锁定按钮的文字颜色p_Font = NULL; //字体指针}用ClassWizard添加下列消息函数:PreSubclassWindow();DrawItem();onMouse Move();OnLButtonDown();OnLButtonUp();在各函数内加入代码:void CMyButton::PreSubclassWindow(){ModifyStyle( 0, BS_OWNERDRAW ); //设置按钮属性为自画式CButton::PreSubclassWindow();}PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。
VC 控制台颜色设置通常控制台都是白字黑底的,千篇一律不免单调。
适当的在控制台中加入一些彩色可以让人耳目一新,本文介绍如何使用系统API接口去修改控制台的文字和背景颜色。
主要用到如下二个函数:得到standard input, standard output, or standard error的设备句柄:HANDLE GetStdHandle(DWORD nStdHandle);参数有:STD_INPUT_HANDLE,STD_OUTPUT_HANDLE及STD_ERROR_HANDLE。
传入STD_OUTPUT_HANDLE就可以得到控制台输出设备的句柄。
设置控制台设备的属性BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput,WORD wAttributes);第一个参数为控制台standard input, standard output, or standard error的设备句柄第二个参数用来设备设备的属性,这里详细介绍下表示颜色的参数。
先看下颜色的种类:在XP系统控制台一共有16种文字颜色,16种背景颜色,可以通过文字颜色+ 背景颜色* 0x10 来设置控制台的颜色。
已经定义好的颜色常量如下:文字颜色使用如下组合:FOREGROUND_BLUE 0x0001 // text color contains blue.FOREGROUND_GREEN 0x0002 // text color contains green.FOREGROUND_RED 0x0004 // text color contains red.FOREGROUND_INTENSITY 0x0008 // text color is intensified.高亮颜色背景颜色使用如下组合(其实就是上面值*0x10):BACKGROUND_BLUE 0x0010 // background color contains blue.BACKGROUND_GREEN 0x0020 // background color contains green.BACKGROUND_RED 0x0040 // background color contains red.BACKGROUND_INTENSITY 0x0080 // background color is intensified.上面的颜色可以任意组合,如知道黄色可以由红色和绿色组成,所以可以用FOREGROUND_GREEN | FOREGROUND_RED来表示黄色的文字。
vc++设置控件的背景色vc++设置控件的背景色重载OnCtlColor函数,这个是必须的。
设置控件的背景颜色:第一:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);//在头文件中声明在主文件中第二:BEGIN_MESSAGE_MAP(COk1Dlg, CDialog)//{{AFX_MSG_MAP(COk1Dlg)。
ON_WM_CTLCOLOR() //要加这句。
//}}AFX_MSG_MAPEND_MESSAGE_MAP()第三:加这个函数HBRUSH CTesDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);switch (nCtlColor){case CTLCOLOR_STATIC: //静态文本{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(255, 0, 0)); //控件背景颜色pDC->SetT extColor(RGB(255,0,0)); //控件中的文字的颜色return (HBRUSH) B;}break;case CTLCOLOR_LISTBOX://列表框{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(0, 255, 0)); pDC->SetT extColor(RGB(255,0,0));return (HBRUSH) B;}break;case CTLCOLOR_DLG : //对话框{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(0, 0, 255)); pDC->SetT extColor(RGB(255,0,0));return (HBRUSH) B;}break;case CTLCOLOR_EDIT : //文本编辑框{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(60, 160, 60)); pDC->SetT extColor(RGB(255,0,0));return (HBRUSH) B;}break;default:break;return hbr;}}控件参考:#define CTLCOLOR_MSGBOX 0#define CTLCOLOR_EDIT 1#define CTLCOLOR_LISTBOX 2#define CTLCOLOR_BTN 3#define CTLCOLOR_DLG 4#define CTLCOLOR_SCROLLBAR 5 #define CTLCOLOR_STATIC 6#define CTLCOLOR_MAX 7#define COLOR_SCROLLBAR 0#define COLOR_BACKGROUND 1 #define COLOR_ACTIVECAPTION 2 #define COLOR_INACTIVECAPTION 3 #define COLOR_MENU 4#define COLOR_WINDOW 5#define COLOR_WINDOWFRAME 6 #define COLOR_MENUTEXT 7#define COLOR_WINDOWTEXT 8 #define COLOR_CAPTIONTEXT 9#define COLOR_ACTIVEBORDER 10 #define COLOR_INACTIVEBORDER 11 #define COLOR_APPWORKSPACE 12 #define COLOR_HIGHLIGHT 13#define COLOR_HIGHLIGHTTEXT 14 #define COLOR_BTNFACE 15#define COLOR_BTNSHADOW 16#define COLOR_GRAYTEXT 17#define COLOR_BTNTEXT 18#define COLOR_INACTIVECAPTIONTEXT 19#define COLOR_BTNHIGHLIGHT 20#if(WINVER >= 0x0400)#define COLOR_3DDKSHADOW 21#define COLOR_3DLIGHT 22#define COLOR_INFOTEXT 23#define COLOR_INFOBK 24#endif /* WINVER >= 0x0400 */#if(WINVER >= 0x0500)#define COLOR_HOTLIGHT 26#define COLOR_GRADIENTACTIVECAPTION 27#define COLOR_GRADIENTINACTIVECAPTION 28#if(WINVER >= 0x0501)#define COLOR_MENUHILIGHT 29#define COLOR_MENUBAR 30#endif /* WINVER >= 0x0501 */#endif /* WINVER >= 0x0500 */#if(WINVER >= 0x0400)#define COLOR_DESKTOP COLOR_BACKGROUND#define COLOR_3DFACE COLOR_BTNFACE#define COLOR_3DSHADOW COLOR_BTNSHADOW#define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT #define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT#define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT 另外,有的控件不在上面定义之中,这时要改变就需要获得控件的ID来改变,具体如下(上面的也可以用下面的这种方法来实现)首先还是要重载OnctlColor函数然后if(pWnd->GetDlgCtrlID()==YourID//你想改变的控件Id) {pDC->SetT extColor(RGB(……));SetBKMode(TRANSPARENT);hbr=m_brush;//这里把画刷改成你自己的}return hbr;。
如何在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 //派生自己的对话框类{……..// Implementationprotected:// Generated message map functions//{{AFX_MSG(CMyDialog)afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);…….//}}AFX_MSGDECLARE_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);}}说明:1、可分别处理以上消息以实现不同控件不同背景色。
2、此方法不适用于按纽控件。
二、通过定制来实现不同颜色按纽。
以下通过定制方形彩色按纽来说明:第一步:派生出自己的按纽类。
//CcolorButton.hclass 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);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……// CColorButtonIMPLEMENT_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 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(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.hclass CColorDlg : public CDialog{…..// Implementationprotected:CColorButton m_btnOK;}//CColorDlg.cpp…….BOOL CColorBtnSampleDlg::OnInitDialog(){CDialog::OnInitDialog();…….VERIFY(m_btnOK.Attach(IDOK, this, RED, BLUE, YELLOW)); …….}。