VC滑动条(滑块)控件颜色变化

VC在MFC下使用滑动条控件来控制颜色的显示。
源实例下载

1。新建一个基于对话框的工程.
在对话框上添加三个滑动条控件,分别对应:红,绿,蓝。分别设置其ID,IDC_SLIDER_COLOR,IDC_SLIDER_COLOR2,IDC_SLIDER_COLOR3;
另外添加三个对应的CSliderCtrl型变量,m_Slider,m_Sliderb,m_Sliderg;
再添加三个编辑框控件,分别对应红,绿,蓝,用于显示颜色值。分别添加三个int型变量为m_red,m_blue,m_green.
再添加两个按钮控件,一个用于显示颜色,属性设置“所有者绘制”;另一个按钮IDC_BUTTON_APPLY用于响应。

2。在对话框类中添加消息处理WM_DRAWITEM,在消息函数中OnDrawItem()添加代码:
UpdateData();
COLORREF clrButn;
clrButn=RGB(m_red,m_blue,m_green);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);

if(nIDCtl==IDC_BUTNDRAW)
{
   CWnd *pWndButn=GetDlgItem(IDC_BUTNDRAW);
   CRect rectButn;
   pWndButn->GetClientRect(&rectButn);
   dc.FillSolidRect(&rectButn,clrButn);
}
dc.Detach();

运行,显示颜色按钮可以显示出颜色,此时为黑色。

3.在OnInitDialog()中初始化滑动条变量:
m_Slider.SetRange(0,255); //设置滑动条的数值范围为0~255。
m_Sliderb.SetRange(0,255);
m_Sliderg.SetRange(0,255);

4。为三个滑动条添加消息处理函数。
在滑动条上右键,选择“事件”,在新建Windows消息/事件中双击NM_CUSTOMDRAW,编辑代码:
UpdateData(TRUE);
m_red=m_Slider.GetPos();
UpdateData(FALSE);

CWnd*pWndButn=GetDlgItem(IDC_BUTNDRAW);
pWndButn->Invalidate();
pWndButn->UpdateWindow();

运行,拖动控件红色的滑动条,颜色即可改变。
继续添加其余两个滑动条的消息处理,这里我们可以把这三个消息响应到一个处理函数中。修改消息映射表中
//{{AFX_MSG_MAP(CDrawbutnDlg)
……
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_COLOR,OnCustomdrawSliderColor)
//}}AFX_MSG_MAP
为:ON_NOTIFY_RANGE(NM_CUSTOMDRAW, IDC_SLIDER_COLOR,IDC_SLIDER_COLOR3, OnCustomdrawSliderColor)
并在处理函数m_red=m_Slider.GetPos();后添加两句:
m_blue=m_Sliderb.GetPos();
m_green=m_Sliderg.GetPos();
注意:不能不通过[事件|新建Windows消息/事件中|NM_CUSTOMDRAW]而直接在消息映射表中直接添加映射内容,否则会出错。
5。运行,现在拖动滑动条,颜色即可变化。下面要实现在编辑框控件中输入值,颜色也相应变化。
为按钮IDC_BUTTON_APPLY添加消息处理函数OnButtonApply();添加代码:
UpdateData();
m_Slider.SetPos(m_red);
m_Sliderb.SetPos(m_blue);
m_Sliderg.SetPos(m_green);

CWnd*pWndButn=GetDlgItem(IDC_BUTNDRAW);
pWndButn->Invalidate();
pWndButn->UpdateWindow();

7。运行,不论在编辑框中输入值,还是拖动滑动条,颜色都会相应变化,与windows中设置颜色对话框很相似.


本例在Visual C++ 6.0上通过。

posted on 2011-05-26 13:34  carekee  阅读(4907)  评论(0编辑  收藏  举报