微调按钮SpinButton及实例

来源:互联网 发布:开淘宝店用别人银行卡 编辑:程序博客网 时间:2024/05/17 04:10

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();
}