日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spin控件使用总结

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spin控件使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?????? 其實spin控件與其它的控件相比,還是比較簡單的,這里我提供一種學習這個控件的捷徑.

?????? 幾乎寫mfc程序的時候,標準控件欄給提供的每個控件,都對應有一種標準的mfc類,這個控件也不例外,與這個控件對應的類名為CSpinButtonCtrl,建議每一位學習mfc的人手頭都備一個<MFC類庫詳解>的CHM幫助文檔,每多的東西在這里都可以查到.

?????? 下面紅色字體顯示的是mfc類庫詳解里的說明,我原樣貼過來的,具體的用法,自己跟據需要研究就可以了.

?

CSpinButtonCtrl

CObject

?└CCmdTarget

????└CWnd

???????└CSpinButtonCtrl



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

請參閱:CSliderCtrl

CSpinButtonCtrl類成員

Construction

CSpinButtonCtrl

構造一個CSpinButtonCtrl對象

Create

創建一個旋轉按鈕控件并將它連接到一個CSpinButtonCtrl對象


Attributes

SetAccel

為一個旋轉按鈕控件設置加速

GetAccel

獲取一個旋轉按鈕控件的加速信息

SetBase

為一個旋轉按鈕控件設置基數

GetBase

獲取一個旋轉按鈕控件的當前基數

SetBuddy

為一個旋轉按鈕控件設置伙伴窗口

GetBuddy

獲取指向當前伙伴窗口的指針

SetPos

設置控件的當前位置

GetPos

獲取一個旋轉按鈕控件的當前位置

SetRange

設置一個旋轉按鈕控件的上限和下限(范圍)

GetRange

獲取一個旋轉按鈕控件的上限和下限(范圍)

SetRange32

設置旋轉按鈕控件的32位范圍

GetRange32

獲取旋轉按鈕控件的32位范圍

?

?

下面是我自己寫的一個示例:

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

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

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

?

1/建立一個mfc對話框類工程,名稱為SpinTest1

2/在對話框窗口里加入一個Edit(ID號為IDC_EDIT_VALUE)和一個spin(ID號為IDC_SPIN_ABC)控件.

為IDC_SPIN_ABC控件建一個關聯變量m_abc

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

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

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

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

?

說明:

有關這個控件,我在網上查了很多的資料,結果都說的很復雜,例如,在沒有設定SetRange()范圍之前,如何運行程序,會發現點擊向上鍵頭的按鈕,數值是減少的,反之是增加的,這個問題網上有人還專門用了一個OnDeltaPos*()函數來解決,而我通過實踐證明,只要設定了范圍,就可以校正這個問題(當然這個只適用于數值數據的方面),網上還有有關點擊了按鈕之后在edit控件里顯示字符的程序,如果做這樣的程序可能會用到OnDeltaPos*()函數,下面我引用一下有關這個函數的添加方法:

旋轉按鈕控件的通知消息

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

??? 說明,其結構如下:

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

應用實例:用Spin控件完成對字符的增減

?

響應UDN_DELTAPOS消息

旋轉按鈕控件的消息UDN_DELTAPOS

表示控件的位置將要改變

原理 , 重載Spin控件的UDN_DELTAPOS消息 , 將會多出如下函數:

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

{

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

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

??? {

???????? //對字符做相關處理 , 例如將"a" 變為?"b"

??? }

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

??? {

???????? //對字符做相關處理 , 例如將"b" 變為?"a"

??? }

??? *pResult = 0;

}

詳細做法:

1: 假設你編輯框為IDC_EDIT , SPIN按鈕為IDC_SPIN .

2: Ctrl + W?, 進入Class Wizard , Object IDs列選擇IDC_SPIN , Messages列選擇UDN_DELTAPOS , 點擊"Add Function" 按鈕.將彈出"OnDeltaposSpin"的對話框 ,OK 添加這個函數.然后點"Edit Code"?, 進入新添加的函數里 .

3: 將會新添加一個函數.

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);???????????????? //得到編輯框中的內容

?

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

??? {

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

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

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

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

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

??? }

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

??? {

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

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

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

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

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

??? }

??? *pResult = 0;

}

使用上述做法,后來遇到一個問題:當一直按住上或者下時,增大16個后就不再增大,后來發現,將條件改成大于0和小于0就可以了,大于0表示向上按鈕。

?

?

當然上面引用的這個程序,我沒有親自動手試過,不過為了以后備查,我還是添加在這里了.

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。