http://blog.csdn.net/zhandoushi1982/article/details/6029313
微调按钮(SpinButton)是个简易的滑动条,它经常与一个称为“兄弟窗口”(Buddy Window)的编辑控件结合起来使用,它们可以很好地配合,以响应用户的输入。本实例实现调节RGB三个颜色分量,控制合成的颜色显示。完成的界面如下:
(1)新建一个基于对话框的应用程序,在上面分别添加三个静态文本、三个编辑框(IDC_EDIT_RED,IDC_EDIT_GREEN,IDC_EDIT_BLUE)、三个SpinButtion控件(IDC_EDIT_RED,IDC_EDIT_GREEN,IDC_EDIT_BLUE)。在CSpinButtonDlg的OnInitDialog方法里配置该对话框初始化,如下:
//设置红色参数
CSpinButtonCtrl *pSpinRed = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_RED); //红色SpinButton控件变量
ASSERT(pSpinRed != NULL);
pSpinRed->SetBuddy(GetDlgItem(IDC_EDIT_RED)); //设置红色的兄弟窗口,两者绑定变化
pSpinRed->SetRange(0,255); //设置红色的编辑框的上下限
pSpinRed->SetPos(128); //设置默认值
CSpinButtonCtrl *pSpinGreen = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_GREEN); //绿色SpinButton控件变量
ASSERT(pSpinGreen != NULL);
pSpinGreen->SetBuddy(GetDlgItem(IDC_EDIT_GREEN)); //设置绿色的兄弟窗口,两者绑定变化
pSpinGreen->SetRange(0,255); //设置绿色的编辑框的上下限
pSpinGreen->SetPos(128); //设置默认值
CSpinButtonCtrl *pSpinBlue = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_BLUE); //绿色SpinButton控件变量
ASSERT(pSpinBlue != NULL);
pSpinBlue->SetBuddy(GetDlgItem(IDC_EDIT_BLUE)); //设置绿色的兄弟窗口,两者绑定变化
pSpinBlue->SetRange(0,255); //设置绿色的编辑框的上下限
pSpinBlue->SetPos(128); //设置默认值
(2)点击编辑框右键添加变量,为三个编辑框分别添加三个变量m_red,m_green,m_blue。右键点击类视图,给对话框类添加私有成员函数void RGBColorChange(void),实现根据RGB颜色分量来改变颜色,函数体如下:
void CSpinButtonDlg::RGBColorChange(void)
{
UpdateData(TRUE); //把值从控件拷贝到变量
CBrush colorBrush;
COLORREF clRGB;
clRGB = RGB(m_red,m_green,m_blue); //构造RGB888格式的颜色值
CClientDC *pClientDC;
pClientDC = new CClientDC(this);
colorBrush.CreateSolidBrush(clRGB);
CRect rect(80,120,160,200);
pClientDC->FillRect(rect,&colorBrush); //用画刷填充矩形区域
delete pClientDC;
}
(3)为3个颜色编辑框添加EN_CHANGE事件处理,方法是右键点击编辑框控件添加event handler,选择对应事件消息及函数。注意此处没有为SpinButton添加事件处理,仅仅为编辑框添加就可以实现目的。
void CSpinButtonDlg::OnEnChangeEditRed()
{
RGBColorChange();
}
void CSpinButtonDlg::OnEnChangeEditGreen()
{
RGBColorChange();
}
void CSpinButtonDlg::OnEnChangeEditBlue()
{
RGBColorChange();
}