日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Spin控件使用总结

發(fā)布時(shí)間:2025/3/12 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spin控件使用总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

不知道為什么每個(gè)控件都會(huì)為難我很久,然后再突然給我提示使我頓悟,唉,可能真的是VC在考驗(yàn)我這個(gè)懶人吧,呵呵,我雖然比較懶可是有時(shí)候還真的很叫真兒的.這不,一個(gè)小小的spin控件和我打了一天的太極,終于今天早晨被我降服了,哈哈…. 扭扭屁股,慶祝一下……

?????? 其實(shí)spin控件與其它的控件相比,還是比較簡(jiǎn)單的,這里我提供一種學(xué)習(xí)這個(gè)控件的捷徑.

?????? 幾乎寫(xiě)mfc程序的時(shí)候,標(biāo)準(zhǔn)控件欄給提供的每個(gè)控件,都對(duì)應(yīng)有一種標(biāo)準(zhǔn)的mfc類(lèi),這個(gè)控件也不例外,與這個(gè)控件對(duì)應(yīng)的類(lèi)名為CSpinButtonCtrl,建議每一位學(xué)習(xí)mfc的人手頭都備一個(gè)<MFC類(lèi)庫(kù)詳解>的CHM幫助文檔,每多的東西在這里都可以查到.

?????? 下面紅色字體顯示的是mfc類(lèi)庫(kù)詳解里的說(shuō)明,我原樣貼過(guò)來(lái)的,具體的用法,自己跟據(jù)需要研究就可以了.

?

CSpinButtonCtrl

CObject

?└CCmdTarget

????└CWnd

???????└CSpinButtonCtrl



一個(gè)“旋轉(zhuǎn)按鈕控件”(也稱(chēng)為上下控件)是一對(duì)箭頭按鈕,用戶(hù)點(diǎn)擊它們來(lái)增加或減小一個(gè)值,比如一個(gè)滾動(dòng)位置或顯示在相應(yīng)控件中的一個(gè)數(shù)字。與一個(gè)旋轉(zhuǎn)按鈕控件相聯(lián)系的值被稱(chēng)為它的當(dāng)前位置。一個(gè)旋轉(zhuǎn)控件通常是與一個(gè)相伴的控件一起使用的,稱(chēng)為“伙伴窗口”。
CSpinButtonCtrl類(lèi)提供了Windows通用旋轉(zhuǎn)按鈕控件的功能。這個(gè)控件(也就是CSpinButtonCtrl類(lèi))只對(duì)運(yùn)行在Windows95和Windows NT3.51或更高版本下的程序來(lái)說(shuō)是可用的。
對(duì)用戶(hù)來(lái)說(shuō),一個(gè)旋轉(zhuǎn)按鈕控件和它的伙伴窗口看起來(lái)通常就象一個(gè)單一的控件。你可以指定一個(gè)旋轉(zhuǎn)按鈕控件自動(dòng)將它自己定位在它的伙伴窗口的旁邊,并且它自動(dòng)將它的伙伴窗口的標(biāo)題設(shè)置為它的當(dāng)前位置。可以將一個(gè)旋轉(zhuǎn)按鈕控件與一個(gè)編輯控件一起使用,以提示用戶(hù)進(jìn)行數(shù)字輸入。
點(diǎn)擊向上箭頭使當(dāng)前位置向最大值方向移動(dòng),而點(diǎn)擊向下箭頭使當(dāng)前位置向最小值的方向移動(dòng)。缺省的,最小值是100,最大值是0。任何時(shí)候,最小值的設(shè)置都大于最大值(例如,當(dāng)使用缺省值時(shí)),點(diǎn)擊向上箭頭減少位置值,而點(diǎn)擊向下箭頭則增加它。
一個(gè)沒(méi)有伙伴窗口的旋轉(zhuǎn)按鈕控件就象簡(jiǎn)化了的滾動(dòng)條。例如,一個(gè)tab控件有時(shí)顯示一個(gè)旋轉(zhuǎn)按鈕控件來(lái)使它的用戶(hù)能夠滾動(dòng)其它的tab進(jìn)入視。
有關(guān)使用CSpinButtonCtrl的更多信息,參見(jiàn)“Visual C++程序員指南”中的“控件主題”和“使用CSpinButtonCtrl”。
#include <afxcmn.h>

請(qǐng)參閱:CSliderCtrl

CSpinButtonCtrl類(lèi)成員

Construction

CSpinButtonCtrl

構(gòu)造一個(gè)CSpinButtonCtrl對(duì)象

Create

創(chuàng)建一個(gè)旋轉(zhuǎn)按鈕控件并將它連接到一個(gè)CSpinButtonCtrl對(duì)象


Attributes

SetAccel

為一個(gè)旋轉(zhuǎn)按鈕控件設(shè)置加速

GetAccel

獲取一個(gè)旋轉(zhuǎn)按鈕控件的加速信息

SetBase

為一個(gè)旋轉(zhuǎn)按鈕控件設(shè)置基數(shù)

GetBase

獲取一個(gè)旋轉(zhuǎn)按鈕控件的當(dāng)前基數(shù)

SetBuddy

為一個(gè)旋轉(zhuǎn)按鈕控件設(shè)置伙伴窗口

GetBuddy

獲取指向當(dāng)前伙伴窗口的指針

SetPos

設(shè)置控件的當(dāng)前位置

GetPos

獲取一個(gè)旋轉(zhuǎn)按鈕控件的當(dāng)前位置

SetRange

設(shè)置一個(gè)旋轉(zhuǎn)按鈕控件的上限和下限(范圍)

GetRange

獲取一個(gè)旋轉(zhuǎn)按鈕控件的上限和下限(范圍)

SetRange32

設(shè)置旋轉(zhuǎn)按鈕控件的32位范圍

GetRange32

獲取旋轉(zhuǎn)按鈕控件的32位范圍

?

?

下面是我自己寫(xiě)的一個(gè)示例:

在我的程序里我用到了兩個(gè)函數(shù),SetRange()和SetBuddy().

SetRange()函數(shù)的作用是設(shè)定spin控件向上與向下按鈕所能調(diào)整的最大和最小值.

SetBuddy()函數(shù)選擇一個(gè)與spin搭伙的控件,一般選用的是edit

?

1/建立一個(gè)mfc對(duì)話(huà)框類(lèi)工程,名稱(chēng)為SpinTest1

2/在對(duì)話(huà)框窗口里加入一個(gè)Edit(ID號(hào)為IDC_EDIT_VALUE)和一個(gè)spin(ID號(hào)為IDC_SPIN_ABC)控件.

為IDC_SPIN_ABC控件建一個(gè)關(guān)聯(lián)變量m_abc

3/在CSpinTest1Dlg類(lèi)的OnInitDialog()里添加下面代碼

?????? m_abc.SetRange(1900,2000);

?????? m_abc.SetBuddy((CWnd *)GetDlgItem(IDC_EDIT_VALUE));

4/你可以根據(jù)需要為Edit控件設(shè)定一個(gè)初始值,這樣這個(gè)spin控件就基本可以使用了

?

說(shuō)明:

有關(guān)這個(gè)控件,我在網(wǎng)上查了很多的資料,結(jié)果都說(shuō)的很復(fù)雜,例如,在沒(méi)有設(shè)定SetRange()范圍之前,如何運(yùn)行程序,會(huì)發(fā)現(xiàn)點(diǎn)擊向上鍵頭的按鈕,數(shù)值是減少的,反之是增加的,這個(gè)問(wèn)題網(wǎng)上有人還專(zhuān)門(mén)用了一個(gè)OnDeltaPos*()函數(shù)來(lái)解決,而我通過(guò)實(shí)踐證明,只要設(shè)定了范圍,就可以校正這個(gè)問(wèn)題(當(dāng)然這個(gè)只適用于數(shù)值數(shù)據(jù)的方面),網(wǎng)上還有有關(guān)點(diǎn)擊了按鈕之后在edit控件里顯示字符的程序,如果做這樣的程序可能會(huì)用到OnDeltaPos*()函數(shù),下面我引用一下有關(guān)這個(gè)函數(shù)的添加方法:

旋轉(zhuǎn)按鈕控件的通知消息

??? 旋轉(zhuǎn)按鈕控件的通知消息只有一個(gè):UDN_DELTAPOS,它表示控件的位置將要改變。
ClassWizard可以映射此消息,在此消息的處理函數(shù)中有個(gè)NM_UPDOWN結(jié)構(gòu)需要進(jìn)行

??? 說(shuō)明,其結(jié)構(gòu)如下:

??? typedef struct _NM_UPDOWN{
??????? NMHDR hdr; //
通知代碼的其他信息
??????? int iPos; //
當(dāng)前位置
??????? int iDelta; //
位置的增減量,單擊向上箭頭此值為負(fù)數(shù)
?? }NMUPDOWN,FAR* LPNMUPDOWN;

應(yīng)用實(shí)例:用Spin控件完成對(duì)字符的增減

?

響應(yīng)UDN_DELTAPOS消息

旋轉(zhuǎn)按鈕控件的消息UDN_DELTAPOS

表示控件的位置將要改變

原理 , 重載Spin控件的UDN_DELTAPOS消息 , 將會(huì)多出如下函數(shù):

void CTestDlg::OnDeltaposSpin3(NMHDR* pNMHDR, LRESULT* pResult)

{

??? NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;

??? if(pNMUpDown->iDelta == 1)??????? // 如果此值為1 , 說(shuō)明點(diǎn)擊了Spin的往下箭頭

??? {

???????? //對(duì)字符做相關(guān)處理 , 例如將"a" 變?yōu)?/span>?"b"

??? }

??? else if(pNMUpDown->iDelta == -1) // 如果此值為-1 , 說(shuō)明點(diǎn)擊了Spin的往上箭頭

??? {

???????? //對(duì)字符做相關(guān)處理 , 例如將"b" 變?yōu)?/span>?"a"

??? }

??? *pResult = 0;

}

詳細(xì)做法:

1: 假設(shè)你編輯框?yàn)?/span>IDC_EDIT , SPIN按鈕為IDC_SPIN .

2: Ctrl + W?, 進(jìn)入Class Wizard , Object IDs列選擇IDC_SPIN , Messages列選擇UDN_DELTAPOS , 點(diǎn)擊"Add Function" 按鈕.將彈出"OnDeltaposSpin"的對(duì)話(huà)框 ,點(diǎn)OK 添加這個(gè)函數(shù).然后點(diǎn)"Edit Code"?, 進(jìn)入新添加的函數(shù)里 .

3: 將會(huì)新添加一個(gè)函數(shù).

void CTestDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult) . . .

4: 添加如下代碼:

void CTestDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult)

{

??? NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;

?

??? CWnd* pWnd = (CWnd*)GetDlgItem(IDC_EDIT);??? //得到指向編輯框的窗口指針

?? ?CString strValue ;

??? pWnd->GetWindowText(strValue);???????????????? //得到編輯框中的內(nèi)容

?

??? if(pNMUpDown->iDelta == 1)??????????????????? //如果點(diǎn)擊的是Spin中的往上按鈕

??? {

???????????? if(!strValue.IsEmpty())

???????????? {

??? ????????????? strValue.SetAt(0 , strValue[0] + 1);?? //編輯框首字母加1

???? ??????????? pWnd->SetWindowText(strValue);???????? //保存修改

???????????? }

??? }

??? else if(pNMUpDown->iDelta == - 1)??? //如果點(diǎn)擊的是Spin中往下按鈕

??? {

???????????? if(!strValue.IsEmpty())

???????????? {

??? ????????????? strValue.SetAt(0 , strValue[0] - 1);?? //編輯框首字母減1

??? ????????????? pWnd->SetWindowText(strValue);???????? //保存修改

???????????? }

??? }

??? *pResult = 0;

}

使用上述做法,后來(lái)遇到一個(gè)問(wèn)題:當(dāng)一直按住上或者下時(shí),增大16個(gè)后就不再增大,后來(lái)發(fā)現(xiàn),將條件改成大于0和小于0就可以了,大于0表示向上按鈕。

?

?

當(dāng)然上面引用的這個(gè)程序,我沒(méi)有親自動(dòng)手試過(guò),不過(guò)為了以后備查,我還是添加在這里了.

總結(jié)

以上是生活随笔為你收集整理的Spin控件使用总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。