本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sding/archive/2009/08/26/4485429.aspx
在VC中CSpinButtonCtrl用法,整理下來
控件的設置
在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;