您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文档 > MFC修改各种控件的背景颜色字颜色和字体
MFC修改各种控件的背景颜色、字颜色和字体今天主要总结一下有关MFC中静态编辑框(StaticEdit)、编辑框(Edit)和按钮(Button)的背景颜色、字颜色和字体。我的程序运行结果如下:由上图我们知道修改的地方有:1、把StaticEdit的背景颜色变成黄色,字体颜色变成蓝色;2、Edit的背景颜色变成黄色,字体变成红色,字体为华文楷体3、Button的背景颜色为绿色,字体为红色。1、对StaticEdit控件修改在0106ChangeColorDlg.h中添加一个变量CBrushm_brush,用来保存控件的背景颜色;对0106ChangeColorDlg添加一个响应WM_CTLCOLOR消息,在OnCtlColor函数中添加如下代码:elseif(pWnd-GetDlgCtrlID()==IDC_STA)//如果是静态编辑框{pDC-SetTextColor(RGB(0,0,255));//修改字体的颜色pDC-SetBkMode(TRANSPARENT);//把字体的背景变成透明的returnm_brush;//返回背景色}2、对Edit控件修改在OnCtlColor函数中添加如下代码:if(pWnd-GetDlgCtrlID()==IDC_EDIT1)//如果是编辑框{pDC-SetTextColor(RGB(255,0,0));//设置编辑框字体的颜色pDC-SetBkColor(RGB(255,255,0));//设置字体背景颜色CFontfont;font.CreatePointFont(100,华文楷体);pDC-SelectObject(&font);//设置字体returnm_brush;}3、对Button控件修改对Button按钮修改需要通过重写DrawItem方法,所以写一个类CSXBtn,继承于CButton类。CSXBtn类实现了鼠标在button和不在button按钮时变换背景色功能。具体代码如下:voidCSXBtn::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct){staticinti=0;UINTuStyle=BS_DEFPUSHBUTTON;//Thiscodeonlyworkswithbuttons.ASSERT(lpDrawItemStruct-CtlType==ODT_BUTTON);//Ifdrawingselected,addthepushedstyletoDrawFrameControl.if(lpDrawItemStruct-itemState&ODS_SELECTED)uStyle|=DFCS_PUSHED;//Drawthebuttonframe.::DrawFrameControl(lpDrawItemStruct-hDC,&lpDrawItemStruct-rcItem,DFC_BUTTON,uStyle);CDC*pDC=CDC::FromHandle(lpDrawItemStruct-hDC);//Getthebutton'stext.CStringstrText;GetWindowText(strText);//Drawthebuttontextusingthetextcolorred.CBrushB;CRectfocusRect;focusRect.CopyRect(&lpDrawItemStruct-rcItem);DrawFocusRect(lpDrawItemStruct-hDC,(LPRECT)&focusRect);pDC-Draw3dRect(focusRect,::GetSysColor(COLOR_BTNHILIGHT),::GetSysColor(COLOR_BTNSHADOW));if(m_flag)//判断鼠标是否在button按钮上{B.CreateSolidBrush(RGB(0,255,0));}else{B.CreateSolidBrush(RGB(0,0,255));}::FillRect(lpDrawItemStruct-hDC,&focusRect,(HBRUSH)B.m_hObject);::SetBkMode(lpDrawItemStruct-hDC,TRANSPARENT);COLORREFcrOldColor=::SetTextColor(lpDrawItemStruct-hDC,RGB(255,0,0));::DrawText(lpDrawItemStruct-hDC,strText,strText.GetLength(),&lpDrawItemStruct-rcItem,DT_SINGLELINE|DT_VCENTER|DT_CENTER);::SetTextColor(lpDrawItemStruct-hDC,crOldColor);}voidCSXBtn::OnMouseMove(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值m_flag=true;TRACKMOUSEEVENTtme;tme.cbSize=sizeof(tme);tme.dwFlags=TME_LEAVE;tme.hwndTrack=this-m_hWnd;::_TrackMouseEvent(&tme);CButton::OnMouseMove(nFlags,point);Invalidate();}voidCSXBtn::OnMouseLeave(){//TODO:在此添加消息处理程序代码和/或调用默认值m_flag=false;CButton::OnMouseLeave();Invalidate();UpdateWindow();}动态设置Edit控件的背景及字体颜色(2009-12-1310:57:03)转载▼标签:vcedit背景颜色字体颜色分类:程序设计1.新建一个基于对话框的应用程序,在对话框上添加一个Edit控件和三个Radio控件2.修改Radio控件的ID分别为:IDC_RAD_RED、IDC_RAD_GREED、IDC_RAD_BLUE,名称对应修改为red、green、blue3.向对话框对应的类中添加如下成员变量:public:COLORREFm_colorEditText;//edit控件的字体颜色COLORREFm_colorEditBK;//edit控件的背景颜色CBrush*m_pEditBkBrush;并在构造函数中初始化:CColorEditDlgDlg::CColorEditDlgDlg(CWnd*pParent):CDialog(CColorEditDlgDlg::IDD,pParent){//{{AFX_DATA_INIT(CColorEditDlgDlg)//}}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_colorEditText=RGB(255,255,255);m_colorEditBK=RGB(0,0,0);m_pEditBkBrush=newCBrush(RGB(0,0,0));}4.向对话框添加WM_CTLCOLOR和WM_DESTORY消息的响应函数如下:HBRUSHCColorEditDlgDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){switch(nCtlColor){caseCTLCOLOR_EDIT:caseCTLCOLOR_MSGBOX://Setcolortogreenonblackandreturnthebackgroundbrush.pDC-SetTextColor(m_colorEditText);pDC-SetBkColor(m_colorEditBK);return(HBRUSH)(m_pEditBkBrush-GetSafeHandle());default:returnCDialog::OnCtlColor(pDC,pWnd,nCtlColor);}}voidCColorEditDlgDlg::OnDestroy(){CDialog::OnDestroy();//TODO:Addyourmessagehandlercodeheredeletem_pEditBkBrush;}5.分别向三个Radio控件添加BN_CLICKED消息响应函数如下:voidCColorEditDlgDlg::OnRadRed(){//TODO:Addyourcontrolnotificationhandlercodeherem_colorEditText=RGB(255,0,0);//redraweditcontrol((CEdit*)GetDlgItem(IDC_EDIT1))-SetRedraw(TRUE);//invalidatetheentirecontrol,forcepainting((CEdit*)GetDlgItem(IDC_EDIT1))-Invalidate();((CEdit*)GetDlgItem(IDC_EDIT1))-UpdateWindow();}voidCColorEditDlgDlg::OnRadBlue(){//TODO:Addyourcontrolnotificationhandlercodeherem_colorEditText=RGB(0,0,255);//redraweditcontrol((CEdit*)GetDlgItem(IDC_EDIT1))-SetRedraw(TRUE);//invalidatetheentirecontrol,forcepainting((CEdit*)GetDlgItem(IDC_EDIT1))-Invalidate();((CEdit*)GetDlgItem(IDC_EDIT1))-UpdateWindow();}voidCColorEditDlgDlg::OnRadGreen(){//TODO:Addyourcontrolnotificationhandlercodeherem_colorEditText=RGB(0,255,0);//redraweditcontrol((CEdit*)GetDlgItem(IDC_EDIT1))-SetRedraw(TRUE);//invalidatetheentirecontrol,forcepainting((CEdit*)GetDlgItem(IDC_EDIT1))-Invalidate();((CEdit*)GetDlgItem(IDC_EDIT1))-UpdateWindow();}完成后运行程序,点击Radio控件可以动态改变编辑框中字体的颜色,如果想改变edit框背景的颜色,可以修改成员变量m_colorEditBK的值并重绘控件。MFCEDIT控件中改变背景色和文字颜色这两天需要给MFC中的EDIT框改变一下背景颜色,而且由于框比较多,且每次需要变色的框也是随机的,但是个数是确定的。在网上搜了好多,下面这个是介绍的比较清楚,而且可以用的一种方法。由于本人用的vs2008,在对话框上右击没有添加事件处理函数一项,且对MFC也不是特别熟悉,所以开始只是在对话框类中重载了onctlcolor()函数,但添加时一直没有效果,最后发现出了只定义该函数外还需要在MAP中添加该函数的映射关系才能正常使用。另外要一次改变多个框的背景的话,需要开辟空间,先把这些框的ID存上,然后在onctlcolor()函数中一一比对。MFC里画图了,颜色了的真抽象,没点基础好难理解啊,转自:
本文标题:MFC修改各种控件的背景颜色字颜色和字体
链接地址:https://www.777doc.com/doc-2888486 .html