您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 家居行业 > MFC颜色调配--vc++6.0颜色设置-如何修改控件颜色
效果展示1.新建一个MyEdit类,该类继承自CEdit类,并添加相关变量和函数;在MyEdit类的头文件(.h)中定义如下变量和函数:private:COLORREFm_BackgroundColor;//背景颜色COLORREFm_TextColor;//文本颜色CBrushm_brushBk;//笔刷public:voidSetBackgroundColor(COLORREFcolor);//设置背景颜色voidSetTextColor(COLORREFcolor);//设置文本颜色COLORREFGetBackgroundColor()const;//获取背景颜色COLORREFGetTextColor()const;//获取文本颜色在MyEdit类的源文件(.cpp)中给变量赋初值,并书写函数体如下:MyEdit::MyEdit()//构造函数{m_BackgroundColor=RGB(0,0,0);m_TextColor=RGB(250,250,250);}MyEdit::~MyEdit()//析构函数{m_brushBk.DeleteObject();//释放笔刷}voidMyEdit::SetBackgroundColor(COLORREFcolor)//设置背景颜色{m_BackgroundColor=color;}voidMyEdit::SetTextColor(COLORREFcolor)//设置文本颜色{m_TextColor=color;}COLORREFMyEdit::GetBackgroundColor()const//获取背景颜色{returnm_BackgroundColor;}COLORREFMyEdit::GetTextColor()const//获取文本颜色{returnm_TextColor;}打开类向导,给MyEdit类添加=WM_CTLCOLOR消息反射在MyEdit类的源文件中的CtlColor()中添加如下代码:HBRUSHMyEdit::CtlColor(CDC*pDC,UINTnCtlColor){//TODO:ChangeanyattributesoftheDCherem_brushBk.DeleteObject();m_brushBk.CreateSolidBrush(m_BackgroundColor);pDC-SetBkColor(m_BackgroundColor);pDC-SetTextColor(m_TextColor);//TODO:Returnanon-NULLbrushiftheparent'shandlershouldnotbecalledreturn(HBRUSH)m_brushBk.GetSafeHandle();}2.新建一个ColorMatch类,该类继承于CDialog类,设置对话框页面布局,添加变量和函数;设置对话框所需要的控件,并进行布局打开类向导为控件绑定变量在ColorMatch类的头文件中加入如下代码:public:CFontm_Font;//字体对象voidSetColor();//设置颜色函数打开类向导为ColorMatch类添加如下消息映射在ColorMatch类的源文件中加入如下代码:BOOLCColorMatch::OnInitDialog()//初始化函数{CDialog::OnInitDialog();//TODO:Addextrainitializationherem_slider_red.SetRange(0,255,false);//设置滑动控件的范围m_slider_green.SetRange(0,255,false);//设置滑动控件的范围m_slider_blue.SetRange(0,255,false);//设置滑动控件的范围m_Font.CreateFont(50,0,0,0,0,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,LPCTSTR(Arial));m_EE.SetFont(&m_Font);//设置显示的字体大小m_red.SetBackgroundColor(RGB(255,0,0));m_green.SetBackgroundColor(RGB(0,255,0));m_blue.SetBackgroundColor(RGB(0,0,255));returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCColorMatch::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/*滑动条被滑动时触发*/{//TODO:Addyourmessagehandlercodehereand/orcalldefaultSetColor();CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}voidCColorMatch::SetColor()//设置颜色函数{intred=m_slider_red.GetPos();//获取红色值intgreen=m_slider_green.GetPos();//获取绿色值intblue=m_slider_blue.GetPos();//获取黄色值COLORREFcolor=RGB(red,green,blue);//合成RGB值m_EE.SetBackgroundColor(color);//设置背景颜色m_EE.SetTextColor(16777215-color);//设置字体颜色CStringcolorstr,redstr,greenstr,bluestr;colorstr.Format(%d,color);//颜色字符串化SetDlgItemText(IDC_EDIT,colorstr);redstr.Format(%d,red);greenstr.Format(%d,green);bluestr.Format(%d,blue);SetDlgItemText(IDC_EDIT_RED,redstr);//修改各种颜色的数值SetDlgItemText(IDC_EDIT_GREEN,greenstr);SetDlgItemText(IDC_EDIT_BLUE,bluestr);}3.编译、链接生成可执行文件进行测试。实际上呢,本片文章用到的就是一个=WM_CTLCOLOR消息反射,消息反射就是说子控件,向父对象去请求重绘自己的颜色,文本等,因此这里需要使用一个继承于CEdit类MyEdit类,这样我们的控件才可以在父窗口不重绘的条件下,进行重绘。
本文标题:MFC颜色调配--vc++6.0颜色设置-如何修改控件颜色
链接地址:https://www.777doc.com/doc-7282927 .html