CSpinButtonCtrl(SPIN控制項)用法

來源:互聯網
上載者:User
 

控制項的設定

在Edit控制項上面設定group屬性(特別注意)
在Spin控制項上設定
  Auto Buddy 為 true
  Set Buddy Integer 為 true
  Alignment 為 Right Align


在OnInitDialog()中加入

 

    CSpinButtonCtrl * pSpinCtrl = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
    pSpinCtrl->SetRange(0,128);//控制項屬性裡設定了這些之後,一般做到這一步就可以了
    pSpinCtrl->SetBuddy(GetDlgItem(IDC_EDIT_WEIGHT));
    pSpinCtrl->SetBase(10);
    pSpinCtrl->SetPos(100);

 

當Edit改變時,SpinCtrl也隨著改變

void CComDlgDlg::OnChangeEditWeight()
{
    m_ulWeight = GetDlgItemInt(IDC_EDIT_WEIGHT);
    CSpinButtonCtrl * pSpinCtrl = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
    pSpinCtrl->SetPos(m_ulWeight);
}

 

 

 


///////////////////////////////////////

一般應用:

設定屬性:
Auto Buddy(自動取關聯控制項為TAB順序前一個)
Set Buddy Interger(使控制項設定關聯控制項數值,這個值可以是十進位或十六進位)
Wrap(數值超過範圍時迴圈)
Arrow keys(當按下向上和向下方向鍵時,控制項可以增加或減小)

OnInitDialog函數中設定控制項數值範圍:
SetRange(0,255);

、旋轉按鈕控制項

    “旋轉按鈕控制項”(也稱為上下控制項)是一對箭頭按鈕,使用者點擊它們來增加或減小某個
值,比如一個滾動位置或顯示在相應控制項中的一個數字。一個旋轉控制項通常是與一個相伴的
控制項一起使用的,這個控制項稱為“夥伴視窗”。

    一個旋轉按鈕控制項可以自動定位在它的夥伴視窗的旁邊,看起來就像一個單一的控制項。
通常,將一個旋轉按鈕控制項與一個編輯控制項一起使用,以提示使用者進行數字輸入。點擊向上
箭頭使當前位置向最大值方向移動,而點擊向下箭頭使當前位置向最小值的方向移動。預設
時,最小值是100,最大值是0,當使用者點擊向上箭頭則減少數值,而點擊向下箭頭則增加
它,這看起來就像顛倒一樣,因此我們還需使用成員函數CSpinButtonCtrl::SetRange來改變
最大和最小值。

    (1)旋轉按鈕控制項常用的風格

    旋轉按鈕控制項常用的風格有:

  UDS_HORZ 控制項的箭頭指向左和右,而不是指向上和下。
  UDS_WRAP 若控制項的增加或減小超過了結尾或開始,使數值可以“迴圈”。
  UDS_ARROWKEYS 當按下向上和向下方向鍵時,控制項可以增加或減小。
  UDS_SETBUDDYINT 使控制項設定夥伴視窗數值,這個值可以是十進位或十六進位。
  UDS_NOTHOUSANDS 不在每隔三個十進位數位地方加上千分隔字元。
  UDS_AUTOBUDDY 自動選擇一個Z-order中的前一個視窗作為控制項的夥伴視窗。
  UDS_ALIGNRIGHT 將旋轉按鈕視窗定位在夥伴視窗的右邊。夥伴視窗的寬度被減小來適應此控制項的寬度。
  UDS_ALIGNLEFT 將旋轉按鈕視窗定位在夥伴視窗的右邊。夥伴視窗被移動到右邊,並且它的寬度被減小來適應此控制項的寬度。

    這些風格也可通過旋轉按鈕控制項屬性對話方塊來設定,其Styles屬性說明如下:

  .Orientation 控制項放置方向:Vedical(垂直)、Hofizontal(水平,同UDS_HORZ)。
  .Alignment 控制項在夥伴視窗的位置安排:Unattached(不相干)、Right(右邊,同UDS_ALIGNRIGHT)、Left(左邊, 同UDS_ALlGNLEFT)。
  .Auto buddy 同UDS_AUTOBUDDY。
  .Set buddy integer 同UDS_SETBUDDYINT。
  .No thousands 同UDS_NOTHOUSANDS。
  .Wrap  同UDS_WRAP。
  .Arrow keys 同UDS_ARROWKEYS。
  .Hot track 滑鼠熱點跟蹤。

    (2)旋轉按鈕控制項的基本操作

    基本操作包括基數、範圍、位置設定和擷取,分別說明如下:

    基數的設定和擷取

    成員函數SetBase是用來設定其基數的,其原型如下:

    int SetBase(int nBase);

    此成員函數用來設定一個旋轉按鈕控制項的基數.這個基數值決定了夥伴視窗顯示的數字是十進位的還
    是十六進位的.十六進位的數總是無符號的;十進位的數是有符號的.如果成功則返回先前的基數值,
    如果給出的是一個無效的基數則返回一個非零值。參數nBase表示控制項的新的基數.

    與此函數相對應的是擷取一個旋轉按鈕控制項的基數的成員函數:UINT GetBase()const;

    範圍及當前位置的設定和擷取

    成員函數SetPos、SetRange是用來設定一個旋轉按鈕控制項的當前位置和範圍,其原型如下:

      int SetPos(int nPos);

    參數nPos表示控制項的新位置.這個值必須在控制項的上限和下限指定的範圍之內.

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

    參數nLower和nUpper表示控制項的上限和下限.任何一個界限值都不能大於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;

    與上述函數相對應的成員函數有:

    CWnd* GetBuddy()const;
  UINT GetAccel(int nAccel,UDACCEL* pAccel)const;

    (3)旋轉按鈕控制項的通知訊息

    旋轉按鈕控制項的通知訊息只有一個:UDN_DELTAPOS,它表示控制項的位置將要改變。
用ClassWizard可以映射此訊息,在此訊息的處理函數中有個NM_UPDOWN結構需要進行

    說明,其結構如下:

    typedef struct _NM_UPDOWN{
        NMHDR hdr; //通知代碼的其他資訊
        int iPos; //當前位置
        int iDelta; //位置的增減量,單擊向上箭頭此值為負數
   }NMUPDOWN,FAR* LPNMUPDOWN;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.