效果展示

1.新建一个MyEdit类,该类继承自CEdit类,并添加相关变量和函数;

在MyEdit类的头文件(.h)中定义如下变量和函数:

private:COLORREF m_BackgroundColor;//背景颜色COLORREF m_TextColor;//文本颜色 CBrush m_brushBk;//笔刷
public:void SetBackgroundColor(COLORREF color);//设置背景颜色void SetTextColor(COLORREF color);//设置文本颜色COLORREF GetBackgroundColor() const;//获取背景颜色COLORREF GetTextColor() const;//获取文本颜色

在MyEdit类的源文件(.cpp)中给变量赋初值,并书写函数体如下:

MyEdit::MyEdit()//构造函数
{m_BackgroundColor=RGB(0,0,0);m_TextColor=RGB(250,250,250);
}
MyEdit::~MyEdit()//析构函数
{m_brushBk.DeleteObject();//释放笔刷
}
void MyEdit::SetBackgroundColor(COLORREF color)//设置背景颜色
{m_BackgroundColor=color;
}
void MyEdit::SetTextColor(COLORREF color)//设置文本颜色
{m_TextColor=color;
}
COLORREF MyEdit::GetBackgroundColor() const//获取背景颜色
{return m_BackgroundColor;
}
COLORREF MyEdit::GetTextColor() const//获取文本颜色
{return m_TextColor;
}

打开类向导,给MyEdit类添加 =WM_CTLCOLOR 消息反射

在MyEdit类的源文件中的CtlColor()中添加如下代码:

HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{// TODO: Change any attributes of the DC herem_brushBk.DeleteObject();m_brushBk.CreateSolidBrush(m_BackgroundColor);pDC->SetBkColor(m_BackgroundColor);pDC->SetTextColor(m_TextColor);// TODO: Return a non-NULL brush if the parent's handler should not be calledreturn (HBRUSH)m_brushBk.GetSafeHandle();
}

2.新建一个ColorMatch类,该类继承于CDialog类,设置对话框页面布局,添加变量和函数;

设置对话框所需要的控件,并进行布局

打开类向导为控件绑定变量

在ColorMatch类的头文件中加入如下代码:

public:CFont m_Font;//字体对象void SetColor();//设置颜色函数

打开类向导为ColorMatch类添加如下消息映射

在ColorMatch类的源文件中加入如下代码:

BOOL CColorMatch::OnInitDialog()// 初始化函数
{CDialog::OnInitDialog();// TODO: Add extra initialization herem_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));return TRUE;  // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE
}void CColorMatch::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) /*滑动条被滑动时触发*/
{// TODO: Add your message handler code here and/or call defaultSetColor();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}void CColorMatch::SetColor()//设置颜色函数{int red=m_slider_red.GetPos();//获取红色值int green=m_slider_green.GetPos();//获取绿色值int blue=m_slider_blue.GetPos();//获取黄色值COLORREF color=RGB(red,green,blue);//合成RGB值m_EE.SetBackgroundColor(color);//设置背景颜色m_EE.SetTextColor(16777215-color);//设置字体颜色CString colorstr,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颜色设置,如何修改控件颜色相关推荐

  1. MFC设置对话框背景色及控件颜色

    MFC设置对话框背景色及控件颜色 一.使用背景图片更改对话框背景色 在对话框源文件void CxxDlg::OnPaint()函数中 if (IsIconic()) { (这里省略) } else { ...

  2. VC 对话框背景颜色 控件颜色

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  3. 设置ListCtrl列表控件其中某一行的字体和背景颜色

    设置ListCtrl列表控件其中某一行的字体和背景颜色,可以最终达到如下效果: 操作步骤如下所示: 1.先添加一个自定义消息 ON_NOTIFY ( NM_CUSTOMDRAW,IDC_V_H264_ ...

  4. APP国际化、动态设置控件颜色(APP个性化)

    亲身体验:某些时候QQ音乐首页整体都成灰色,艾玛,BUG!!!,截图反馈.只有首页,其他的界面没问题,好家伙,故意的! 确实,今天咱也来搞一下,这篇文章主要记录项目 1. 国际化 2. 动态设置控件颜 ...

  5. VC设置静态文本控件的显示字体和显示内容

    首先,在对话框上添加一个Static控件,关联一个控制变量m_static(不是Value,是Control) 然后,建立一个字体变量 private:CFont m_Font; 然后,在对话框初始化 ...

  6. MFC中如何将焦点设置到指定控件上

    在最近的项目中,需要实现刷卡功能,其原理就是响应WM_KEYDOWN和WM_CHAR等键盘消息,需要重写BOOL PreTranslateMessage(MSG* pMsg)函数来处理键盘消息:软件启 ...

  7. android 设置文字大小控件

    自定义设置文字大小控件 1.效果图 2.自定义文字设置控件 public class TextSizeSelector extends View {private int margingLeft;pr ...

  8. ASP.NET2.0的multiview和wizard控件

    在asp.net 1.1中,如果要做一个具有向导式的应用程序,是比较麻烦的.所谓向导式应用,就是说比如一个注册用户的应用,是需要若干步完成的,用户填完某一步的表单后,可以点"下一步" ...

  9. ASP.NET 2.0 中的 DataSource 系列控件

    在ASP.NET 2.0中,引入了DataSource系列控件,扔一个到页面上并且选择性的配置好SELECT/UPDATE/INSERT/DELETE对应的操作,它就能够和数据空间无缝合作自动处理查询 ...

最新文章

  1. 2015-12-03 AD中用户属性Lastlogon与LastlogonTimeStamp的区别
  2. JS判断字符串变量是否含有某个字串的方法
  3. Method for Discovering Network Topology中文翻译【Z-Stack Home 1.2.0开发文档】
  4. 获取今日、本周、本月至今日的所有日期
  5. NB-IoT成新宠 运营商对物联网充满野心
  6. 【笔记】树莓派配置麦克风录音
  7. php案例之后台数据显示-- PDO版(php data object)
  8. NZ源码交易平台虚拟交易系统(商家版) 高仿淘码网模板
  9. JavaScript练习(一)——跟随鼠标移动
  10. windows server 2008 R2 怎么集成USB3.0驱动
  11. Root Cause Analysis of Anomalies of Multitier Services in Public Clouds
  12. qt安装报错:下载“http://download.qt.io/online/xxxxx/_meta.7z“server replied: Bad Gateway出现网络错误
  13. macd指标如何看?怎么用MACD指标确定买入和离场点?
  14. 微信小程序html5音频,微信小程序 audio音频播放详解及实例
  15. 什么是防雷接地,防雷接地工程的作用和重要意义
  16. 路边停车系统的具体流程是什么
  17. sklearn cheat sheet
  18. 将Sublime Text 设置成中文版
  19. C. Madoka and Childish Pranks #777 div2
  20. shell脚本 把十进制数据转换成十六进制

热门文章

  1. php prettyprinter,SQL Pretty Printer
  2. EI期刊《系统工程与电子技术》投稿经历
  3. 设计FMEA步骤六:优化
  4. 计算机网络英语作文150字,关于分析网络的优点150字左右的英语作文
  5. Android 之 Project Butter 详细介绍
  6. 前端Number转千位符以及反转
  7. 微信餐饮小程序有必要开发吗
  8. 为什么听过很多道理,依然过不好这一生?
  9. MBA-day13数学-年龄问题
  10. Steam Apex Legends 最简单领取方法,不需要改地区