效果展示
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)//设置文本颜色 { }
COLORREF MyEdit::GetBackgroundColor() const//获取背景颜色 { }
m_TextColor=color;
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 here
m_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 called return (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 here
m_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(\rial\)); 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) /*滑动条被滑动时触发*/
{ }
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
// TODO: Add your message handler code here and/or call default
SetColor();
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(\,color);//颜色字符串化 SetDlgItemText(IDC_EDIT,colorstr); redstr.Format(\,red); greenstr.Format(\,green); bluestr.Format(\,blue);
SetDlgItemText(IDC_EDIT_RED,redstr);//修改各种颜色的数值 SetDlgItemText(IDC_EDIT_GREEN,greenstr); SetDlgItemText(IDC_EDIT_BLUE,bluestr);