zoukankan      html  css  js  c++  java
  • VC中Edit控件和Spin控件的使用

     spin控件(旋转按钮控件)

    设置属性
    Auto Buddy(
    自动取关联控件为TAB顺序前一个)
    SetBuddy Interger(
    使控件设置关联控件数值,这个值可以是十进制或十六进制)
    Wrap(
    数值超过范围时循环)
    Arrow keys(
    当按下向上和向下方向键时,控件可以增加或减小)

    OnInitDialog
    函数中设置控件数值范围:
    SetRange(0,255);

    旋转按钮控件

        “旋转按钮控件”(也称为上下控件)是一对箭头按钮,用户点击它们来增加或减小某个
    值,比如一个滚动位置或显示在相应控件中的一个数字。一个旋转控件通常是与一个相伴的
    控件一起使用的,这个控件称为“伙伴窗口”。

        一个旋转按钮控件可以自动定位在它的伙伴窗口的旁边,看起来就像一个单一的控件。
    通常,将一个旋转按钮控件与一个编辑控件一起使用,以提示用户进行数字输入。点击向上
    箭头使当前位置向最大值方向移动,而点击向下箭头使当前位置向最小值的方向移动。缺省
    时,最小值是100,最大值是0,当用户点击向上箭头则减少数值,而点击向下箭头则增加
    它,这看起来就像颠倒一样,因此我们还需使用成员函数CSpinButtonCtrl::SetRange来改变
    最大和最小值。

     (2)旋转按钮控件的基本操作

        基本操作包括基数、范围、位置设置和获取,分别说明如下:

        基数的设置和获取

        成员函数SetBase是用来设置其基数的,其原型如下:

        int SetBase(int nBase);

        此成员函数用来设置一个旋转按钮控件的基数.这个基数值决定了伙伴窗口显示的数字是十进制的还
        
    是十六进制的.十六进制的数总是无符号的;十进制的数是有符号的.如果成功则返回先前的基数值,
        
    如果给出的是一个无效的基数则返回一个非零值。参数nBase表示控件的新的基数.

        与此函数相对应的是获取一个旋转按钮控件的基数的成员函数:UINT GetBase()const;

        范围及当前位置的设定和获取

        成员函数SetPosSetRange是用来设置一个旋转按钮控件的当前位置和范围,其原型如下:

          int SetPos(int nPos);

        参数nPos表示控件的新位置.这个值必须在控件的上限和下限指定的范围之内.

          void SetRange(int nLower,int nUpper);
          void SetRange32(int nLower,int nUpper);

        参数nLowernUpper表示控件的上限和下限.任何一个界限值都不能大于UD_MAXVAL或小于
        UD_MINVAL
    。另外,两个界限值之间的差值必须不超过UD_MAXVAL。成员函数SetRange32为此
        
    旋转按钮控件设置32位的范围。

        与上述函数相对应的成员函数有:

          int GetPos()const;
          DWORD GetRange()const;
          void GetRange(int& lower,int& upper)const;
          void GetRange32(int& lower,int& upper)const;

        其他操作成员函数

        CWnd* SetBuddy(CWnd* pWndBuddy);

         此成员函数用来为一个旋转控件设置伙伴窗口。返回值一个指向先前的伙伴窗口的指针。参数
         pWndBuddy
    表示指向新的伙伴窗口的指针。

        BOOL SetAccel(int nAccel,UDACCEL* pAccel);

        此成员函数用来设置一个旋转按钮控件的加速。如果成功则返回非零值;否则返回0。参数nAccel
        
    示由pAccel指定的UDACCEL结构的数目.pAccel指向一个UDACCEL结构数组的指针,该数组包含了加速
        
    信息,其结构如下:
        typedef struct{
          UINT nSec;//
    位置改变前所等待的秒数。
          UINT nInc;//
    位置增量。
        }UDACCEL,FAR* LPUDACCEL;

    Spin控件和Edit控件合用,实现Edit控件中数字的增加或减少。
    (1)整数的增减:
    CEdit *prow=(CEdit *)GetDlgItem(IDC_EDIT_ROWS);

    m_spinRows.SetBuddy(prow);

    m_spinRows.SetRange(1,100);

    m_spinRows.SetBase(1);

    m_spinRows.SetPos(2);
    CSpinButtonCtrl m_spinRows;//已在先前定义定义
    在Spin控件的属性信息中,styles中选中一、二项,即A自动伙伴、Setbuddy integer.
    (2)在上面的例子中使用Spin控件时,可能碰到的一个问题时,Spin控件的上下箭头默认只能调整整数数值,无法以小数的方式进行调整。要能够以小数方式,比如每次次0.1的步长增加或减少数值,需要我们编程实现。当用户单击Spin控件的上下箭头时,对话框会接收到WM_VSCROLL消息,我们在这个消息响应函数中设置编辑框的值就可以了:
    void CCommonControlDlg::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
    {
    if(SB_ENDSCROLL==nSBCode)
    return;
    if(pScrollBar->GetDlgCtrlID()==IDC_SPIN)
    {
    CSpinButtonCtrl* pSpin=(CSpinButtonCtrl)pScrollBar;
    CString strValue;
    strValue.Format("%3.1f",(double)pSpin->GetPos()/10);
    pSpin->GetBuddy()->SetWindowText(strValue);
    }

    CDialog::OnVScroll(nSBCode,nPos,pScrollBar);
    }
    VC学习笔记6:旋转控件(Spin)的使用
    当单击旋转控件上的按钮时,相应的编辑控件值会增大或减小。其设置的一般步骤为:
    一、在对话框中放入一个Spin控件和一个编辑控件作为Spin控件的伙伴窗口,
    设置Spin控件属性:Auto buddy、Set buddy integer、Arrow keys
    设置文本控件属性:Number
    二、用ClassWizard为Spin控件定义变量m_Spin,为编辑控件定义变量m_Edit,定义时注意要把m_Edit设置为int型。
    三、在对话框的OnInitDialog()函数中加入语句:
    BOOL CMyDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) ); //设置编辑控件为Spin控件的伙伴窗口
    m_Spin.SetRange( 0, 10 ); //设置数据范围为0-10
    return TRUE;
    }
    四、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数,再加入语句:
    void CMyDlg::OnChangeEdit1()
    {
    m_Edit = m_Spin.GetPos(); //获取Spin控件当前值
    }
    数值调节钮控件 (Spin Control)(也称为 up-down 控件)提供一对箭头键,用户可以单击它们来调整数值。该值称为当前位置。该位置保持在数值调节钮范围内。当用户单击上箭头键,该位置移向最大值;当用户单击下箭头键,该位置移向最小值。
    数值调节钮控件 (Spin Control) 在 MFC 中由类 CSpinButtonCtrl 表示。
    注意 数值调节钮的默认范围为最大设置到零 (0) 和最小设置到 100。由于最大值小于最小值,因此单击上箭头键将减小位置,而单击下箭头键将增大位置。用 CSpinButtonCtrl::SetRange 调整这些值。
    一般情况下,当前位置显示在同伴控件中。同伴控件称为“合作者窗口”。有关数值调节钮控件 (Spin Control)的说明信息,请参见 Platform SDK 中的关于 Up-Down 控件。
    数值调节钮样式
    数值调节钮 (CSpinButtonCtrl) 的许多设置由样式控制。可以用对话框编辑器中的“属性”窗口设置下列样式。
    • 方向 “垂直”或者“水平”。控制箭头按钮的方向。与 UDS_HORZ 样式相关联。
    • 对齐 “取消附加”、“左”和“右”中的一个。控制数值调节钮的位置。合作者窗口旁边的数值调节钮的“左”位置和“右”位置。合作者窗口的宽度将减小以适应数值调节钮。与 UDS_ALIGNLEFT 和 UDS_ALIGNRIGHT 样式相关联。
    • 自动合作者 自动以 Z 顺序选择上一窗口作为数值调节钮的合作者窗口。在对话框模板上,这是以 Tab 键顺序在数值调节钮之前的控件。与 UDS_AUTOBUDDY 样式相关联。
    • 设置合作者整数 导致数值调节钮控件 (Spin Control) 随当前位置的更改而增大和减小合作者窗口的标题。与 UDS_SETBUDDYINT 样式相关联。
    • 无千位分隔符 不在合作者窗口标题的数值中插入千位分隔符。与 UDS_NOTHOUSANDS 样式相关联。
    注意 若要用对话框数据交换 (DDX) 从合作者控件中获取整数值,请设置该样式。DDX_Text 不接受嵌入的千位分隔符。
    • 换行 当增大或减小的数值超出了控件范围时导致位置“换行”。与 UDS_WRAP 样式相关联。
    • 箭头键 当按下上箭头键和下箭头键时导致数值调节钮增大或减小位置。与 UDS_ARROWKEYS 样式相关联。
    数值调节钮成员函数
    有几个成员函数可用于数值调节钮控件 (Spin Control) (CSpinButtonCtrl)。使用这些函数更改数值调节钮的下列属性。
    • 加速 可以调整用户按下箭头按钮时位置更改的速率。若要使用加速,请使用 SetAccel 和 GetAccel 成员函数。
    • 基数 可以更改用于在合作者窗口标题中显示位置的基数(10 或 16)。若要使用基数,请使用 GetBase 和 SetBase 成员函数。
    • 合作者窗口 可以动态设置合作者窗口。若要查询或更改作为合作者窗口的控件,请使用 GetBuddy 和 SetBuddy 成员函数。
    • 位置 可以查询和更改位置。若要直接处理位置,请使用 GetPos 和 SetPos 成员函数。由于合作者控件的标题可能已经更改(例如,在合作者为编辑控件 (Edit Control) 的情况下),所以 GetPos 检索当前标题并相应地调整位置。
    • 范围 可以更改数值调节钮的最大和最小位置。默认情况下,最大值设置为 0,最小值设置为 100。由于默认最大值小于默认最小值,所以箭头按钮的操作正好与直觉相反。一般情况下,用 SetRange 成员函数设置范围。若要查询范围,请使用 GetRange。
    控件学习实例:
    这段代码是在初始化里面进行设置:
    CSpinButtonCtrl *pSpinRed = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN_RED);
    ASSERT(pSpinRed != NULL);
    //设置伙伴窗口
    //一定要设置合作者窗口,否则捕捉不到合作者窗口的变化
    pSpinRed->SetBuddy(GetDlgItem(IDC_EDIT_RED));
    //设置SpinButton的上下限度
    pSpinRed->SetRange(0,255);
    //设置起始Spinbutton的位置
    pSpinRed->SetPos(128);
    由于合作窗口是编辑框,为编辑框添加OnChange处理方法。该处理方法将实时显示对应的颜色。具体操作是将这三个颜色编辑框的OnChange处理方法都指定到OnColorChange方法。
    void CTextDlg::OnColorChange()
    {
    //获得一下对话框的数据
    UpdateData(TRUE);
    CBrush colorBrush;
    COLORREF clRGB;
    //得到颜色值
    clRGB = RGB(m_red,m_green,m_blue);
    //以下是绘图
    CClientDC *pClientDC;
    pClientDC = new CClientDC(this);
    colorBrush.CreateSolidBrush(clRGB);
    CRect rect(80,120,160,200);
    pClientDC->FillRect(rect,&colorBrush);
    delete pClientDC;
    }

    一、在对话框中放入一个Spin控件和一个编辑控件作为Spin控件的伙伴窗口,
    设置Spin控件属性:Auto buddy、Set buddy integer、Arrow keys
    设置文本控件属性:Number

    二、用ClassWizard为Spin控件定义变量m_Spin,为编辑控件定义变量m_Edit,定义时注意要把m_Edit设置为int型。

    三、在对话框的OnInitDialog()函数中加入语句:
    BOOL CMyDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        
        m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) );    //设置编辑控件为Spin控件的伙伴窗口
        m_Spin.SetRange( 0, 10 );    //设置数据范围为0-10
        return TRUE;
    }

    四、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数,再加入语句:
    void CMyDlg::OnChangeEdit1()
    {
        m_Edit = m_Spin.GetPos();    //获取Spin控件当前值
    }

  • 相关阅读:
    Maven 环境的配置
    zTree的简单例子
    plsql免安装客户端的配置
    HDU 1232 畅通工程
    HDU 5698 瞬间移动
    Codeforces 1015E1 Stars Drawing (Easy Edition)
    Codeforces 784B Santa Claus and Keyboard Check
    Codeforces 500C New Year Book Reading
    NSarray 赋值 拷贝 等问题记录
    UINavigationController 操作记录
  • 原文地址:https://www.cnblogs.com/youxin/p/2857886.html
Copyright © 2011-2022 走看看