今天主要总结一下有关MFC 中静态编辑框(StaticEdit)、编辑框(Edit)和按钮(Button)的背景颜色、字颜色和字体。

我的程序运行结果如下:

由上图我们知道修改的地方有:1、把StaticEdit的背景颜色变成黄色,字体颜色变成蓝色;2、Edit的背景颜色变成黄色,字体变成红色,字体为华文楷体

3、Button的背景颜色为绿色,字体为红色。

1、对StaticEdit控件修改

在0106ChangeColorDlg.h中添加一个变量CBrush m_brush,用来保存控件的背景颜色;

对0106ChangeColorDlg添加一个响应WM_CTLCOLOR消息,在OnCtlColor函数中添加如下代码:

else if(pWnd->GetDlgCtrlID()==IDC_STA)//如果是静态编辑框
{
pDC->SetTextColor(RGB(,,));//修改字体的颜色
pDC->SetBkMode(TRANSPARENT);//把字体的背景变成透明的
return m_brush;//返回背景色
}

2、对Edit控件修改

在OnCtlColor函数中添加如下代码:

if(pWnd->GetDlgCtrlID()==IDC_EDIT1)//如果是编辑框
{
pDC->SetTextColor(RGB(,,));//设置编辑框字体的颜色 pDC->SetBkColor(RGB(,,));//设置字体背景颜色
CFont font;
font.CreatePointFont(,"华文楷体");
pDC->SelectObject(&font);//设置字体
return m_brush; }

3、对Button控件修改

对Button按钮修改需要通过重写DrawItem方法,所以写一个类CSXBtn,继承于CButton类。CSXBtn类实现了鼠标在button和不在button按钮时变换背景色功能。具体代码如下:

void CSXBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
static int i=;
UINT uStyle = BS_DEFPUSHBUTTON; // This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON); // If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED; // Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle); CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); // Get the button's text.
CString strText;
GetWindowText(strText);
// Draw the button text using the text color red.
CBrush B;
CRect focusRect;
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(,,));
}
else
{
B.CreateSolidBrush(RGB(,,));
}
::FillRect(lpDrawItemStruct->hDC,&focusRect, (HBRUSH)B.m_hObject);
::SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(,,));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
} void CSXBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_flag=true;
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(tme);
tme.dwFlags=TME_LEAVE;
tme.hwndTrack=this->m_hWnd;
::_TrackMouseEvent(&tme);
CButton::OnMouseMove(nFlags, point);
Invalidate();
} void CSXBtn::OnMouseLeave()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_flag=false; CButton::OnMouseLeave();
Invalidate();
UpdateWindow();
}

最后,关于WM_MOUSELEAVE的用法请参考:http://www.cnblogs.com/Simon-Sun1988/articles/4209104.html

MFC 修改各种控件的背景颜色、字颜色和字体的更多相关文章

  1. c#winform中如何修改ListView控件每个单元格的颜色

    ListView在View属性为Details的时候它呈现的方式和DataGirdView差不多,它的每一行都是一个ListViewItem,然而每个ListViewItem都有一个BackColor ...

  2. 修改static控件背景颜色和文字颜色

    当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息.如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄, ...

  3. win32 修改Edit控件文本颜色与背景色

    #define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 //编辑控件Edit #define WM_CTLCOLORLISTBO ...

  4. VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]

    在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...

  5. Android中设置控件的背景颜色的方式整理

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 在Android开发中,经常需要设置控件的背景颜色或者图片的src颜色. 效果图 代码分析 根据使用的方法不同,划分为 setBackgro ...

  6. MFC解决Static控件背景透明时文本覆盖重影

    通过映射OnCtlColor消息,而后在该函数中使用pDC->SetBkMode(TRANSPARENT)使Static控件背景透明时会出现:文本覆盖重影的问题,当改变控件的文本就会发生新文本与 ...

  7. 【MFC】picture控件 两种有细微差别的动态加载图片方法

    摘自:http://www.jizhuomi.com/software/193.html VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) 分类标签: 编程入门 ...

  8. 如何设置TextView控件的背景透明度和字体透明度

    如何设置TextView控件的背景透明度和字体透明度 设计师给的标注都是类似这样的: 字号:26 颜色:#000000 透明度:80% 其实,程序上只要需要一个色值就OK了,那么这个色值我如何计算呢? ...

  9. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

      开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...

随机推荐

  1. PDMS模型导出RVM格式

    2 .将PDMS中对象模型导出为RVM格式的宏文件代码如下: eg:如果要导出某几个房间内的全部bran equi !strus = array()!strus.append(|/1RXR246ZL| ...

  2. Quartz作业调度框架及时间表达式的含义和语法

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...

  3. js windows.open()模拟POST提交

    function openPostWindow (url,name, data1, data2)        {            var tempForm = document.createE ...

  4. MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...

  5. yii2使用相关记录

    #Yii::$app->user 是指yii\web\User这个类 #yii2在命令行下执行 D: cd D:\wnmp\php5 php D:\wnmp\www\yii2\yii test/ ...

  6. UISprite(NGUI)扩展 图片镂空

    NGUI 版本2.6.3 在做新手引导时,需要高亮特定UI元素,也就是加个黑色蒙板,然后在蒙版上显示这个UI元素,为了简单方便我扩展了下UISprite,来镂空指定空间. 分为2种,矩形和圆镂空,矩形 ...

  7. css线性渐变--linear-gradient

    使用css直接写渐变,对于现在而言,应该属于比价简单的一件事了,在一定程度上,扁平化的设计趋势的出现,减少了使用渐变色的场景,但是并不影响我们逐渐的熟悉线性渐变Linear-gradient的写法. ...

  8. yii2 model层中配置常量与list

  9. c语言中的副作用!!千万小心!

    今天刚看完书上的副作用,博主觉得呢,副作用其实就在改变变量的值,也就是一个赋值操作!不过刚刚在知道上还是犯了错!!尴尬啊!! 大家都知道,c语言中的赋值操作符是自右向左结合的!! 下面有一个关于赋值中 ...

  10. idea使用心得(2)-安装设置与创建web项目

    idea 是与eclipse齐名的IDE(集成开发工具),以智能闻名,不过对于熟悉eclipse的的用户来说,初次接触idea有些让人搞不清方向,下面介绍一下简单的使用 方式. 1.安装 官网下载ul ...