一般应用:

设置属性:
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;

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

响应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;

}

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

数值调节钮控件 (Spin Control)(也称为 up-down 控件)提供一对箭头键,用户可以单击它们来调整数值。该值称为当前位置。该位置保持在数值调节钮范围内。当用户单击上箭头键,该位置移向最大值;当用户单击下箭头键,该位置移向最小值。

数值调节钮控件 (Spin Control) 在 MFC 中由类 CSpinButtonCtrl 表示。

注意    数值调节钮的默认范围为最大设置到零 (0) 和最小设置到 100。由于最大值小于最小值,因此单击上箭头键将减小位置,而单击下箭头键将增大位置。用 CSpinButtonCtrl::SetRange 调整这些值。

一般情况下,当前位置显示在同伴控件中。同伴控件称为“合作者窗口”。有关数值调节钮控件 (Spin Control)的说明信息,请参见 Platform SDK 中的关于 Up-Down 控件。

数值调节钮样式

数值调节钮 (CSpinButtonCtrl) 的许多设置由样式控制。可以用对话框编辑器中的“属性”窗口设置下列样式。

  • 方向    “垂直”或者“水平”。控制箭头按钮的方向。与 UDS_HORZ 样式相关联。
  • 对齐    “取消附加”、“左”和“右”中的一个。控制数值调节钮的位置。合作者窗口旁边的数值调节钮的“左”位置和“右”位置。合作者窗口的宽度将减小以适应数值调节钮。与 UDS_ALIGNLEFTUDS_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。

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

VC旋转控件测试的时候老是报错,原因是,勾选了属性里的自动结伴整数,而代码里没有设置(或者说与之结伴的编辑框没有设置整数),导致出错,先取消,即可。

MFC Spin 控件的更多相关文章

  1. 发布MFC ActiveX控件并实现自动更新

    一.        引言 上一篇我们讲了如何使用 VC 2005来开发 MFC ActiveX控件,我们开发 ActiveX控件最终目的是将 ActiveX控件发布出来并嵌入在 Web网页中,随着控件 ...

  2. 如何将 MFC ActiveX 控件标记为安全,脚本和初始化

    MSDN原文.ActiveX控件标记安全(可以不仅仅是MFC ActiveX) 概要 默认情况下,MFC ActiveX 控件未标记为对脚本编写是安全的和对初始化是安全的.控制运行在 Internet ...

  3. MFC TabCtrl 控件修改标签尺寸

    注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...

  4. vs2010开发activex(MFC)控件/ie插件(一)

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782904  vs2010开发activex(MFC)控件:      第一步:生成ac ...

  5. MFC 改变控件的大小和位置

    mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...

  6. 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件

    ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...

  7. VS2008/MFC —常用控件使用总结 转载

    在公司培训期间,经理给了我们没人10个界面草图,让我们在VS2008下使用MFC设计,因为在经理的帮助和自己的努力下,终于在三天时间内完成,现在就根据在这三天 时间里所用到的控件做出如下总结: 1.D ...

  8. MFC 对话框控件自动布局

    MFC 设计界面程序总是不够智能,没有这样,没有那样. 今天为了加强mfc功能,设计了一个自动布局的类,使用非常简单. 原理: 每个控件都有一个矩形区域,矩形区域就是控件在对话框中的显示位置和大小, ...

  9. MFC各种控件的常见操作(逐步添加中......)

    由于经常切换系统或界面框架进行编程,难免有时会忘记之前的编程函数等等.所有在此自己做一个备份,以防止重新充电带来的痛苦! 1.CButton 1.1 在VC中编程实现按钮的启用(enable)和禁用( ...

随机推荐

  1. 基于css3的鼠标经过动画显示详情特效

    之前为大家分享过一款基于jquery的手风琴显示详情,今天给大家分享基于css3的鼠标经过动画显示详情特效.这款实例鼠标经过的时候基于中间动画放大,效果非常不错,效果图如下: 在线预览   源码下载 ...

  2. lua错误收集

    这里放一些我遇到的lua错误,希望大家分享一些错误给我,统一放在这里. 1.lua表的引用传值 上面的代码运行后会发现t2[2],t2[3]表里的内容也被删除了,实际上它们 与t2[1]表里的内容都是 ...

  3. mr中间结果优化

    转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/9187721 作为输入 当压缩文件做为mapreduce的输入时,mapreduce ...

  4. Javascript知识点:IIFE - 立即调用函数

    Immediately-invoked Function Expression(IIFE,立即调用函数),简单的理解就是定义完成函数之后立即执行.因此有时候也会被称为“自执行的匿名函数”(self-e ...

  5. [Linux内核]软中断、tasklet、工作队列

    转自:http://www.cnblogs.com/li-hao/archive/2012/01/12/2321084.html 软中断.tasklet和工作队列并不是Linux内核中一直存在的机制, ...

  6. JavaScript概述.pdf

    第1章 JavaScript概述 第2章 使用JavaScript 第3章 语法.关键保留字及变量 第4章 数据类型 第5章 运算符 第6章 流程控制语句 第7章 函数 //没有参数的函数 funct ...

  7. CSS(四):字体和文本属性

    一.字体属性 属性 描述 font-style 设置字体风格 font-weight 设置字体粗细 font-size 设置字体的尺寸(一般用px表示) font-family 设置字体系列 font ...

  8. js 复制 功能

    <html> <head> <title>Zero Clipboard Test</title> <meta charset="utf- ...

  9. jQuery开发中容易忽视的错误

    1.引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前,否则,就会发生找不到对象:最好在<head>元素中,把引入样 ...

  10. COUNT() 函数返回匹配指定条件的行数。

    SQL COUNT() 语法 SQL COUNT(column_name) 语法 COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入): SELECT COUNT(col ...