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控件使用总结相关推荐
- Spin Control (上下控件)
上下控件是Windows中最常用的控件之一.它只不过是一对箭头,用户可单击它来增加或减少控件的设定值.通常,紧靠着上下控件有一个编辑控件,称为伙 伴编辑控件或伙伴控件,用于显示用户输出的值.上下控件在 ...
- 【转】VC2008在工具栏Toolbar里添加XP风格spin box control控件
Spin box control本是用于对话框中的控件.但有时需要将它放到工具栏上.VC++ 2008里实现如下: 一.在工具栏上新增一个工具按钮项,资源命名为ID_TOOL_EDIT_TIME.再增 ...
- VC学习笔记 -单选按钮控件(Ridio Button)的使用
在VC++编程过程中,查资料是一个苦差事,案边放了一摞书左翻右翻好是烦人.一赌气就把一些常用的小技巧自己总结了一下,虽费了些功夫,但对以后编程很有好处.现拿出来与大家共享,以后积累多了,作一个CHM电 ...
- MFC小笔记:上下控件
一.需求 上下控件实际上是由edit控件和spin控件组成的,共2个控件.为方便描述,称为上下控件,即可以点击spin控件上下按钮增减数值,当通过上下按钮操作时,edit控件中同时显示数值的变化.另外 ...
- VC2012下MFC程序各控件的常用方法
一下控件的用法全部在VC2012下调试通过,特发文收藏(部分内容来自或参考自网络): Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改C ...
- 思维习惯埋下的陷阱:在eVC中使用Slider、Spin等控件
前几天,我定下了使用GWES的UI方案,周一开始工作后,果然在两天内应用程序开发一路高歌猛进势如破竹,大家用DialogBox.Button.Static Text控件都觉得巨爽无比,总比自己从Cre ...
- C# 中常用数据类型与控件类型的命名规则
数据类型 数据类型简写 标准命名举例 Array arr arrShoppingList Boolean bln blnIsPostBack Byte byt bytPixelValue Char c ...
- atitit.loading的设计与实现控件选型attilax 总结
atitit.loading的设计与实现控件选型attilax 总结 1. Percentage Loader(推荐) 1 1.1. 起始百分比::调整 progress 1 2. CSS3 Loa ...
- C# 控件缩写大全+命名规范+示例
如有转载,请注明出处:http://www.cnblogs.com/flydoos/archive/2011/08/29/2158903.html C# 控件缩写大全+命名规范+示例 写程序的时候突然 ...
最新文章
- Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
- 在 Dubbo3.0 上服务治理的实践
- 手机端公告文本回滚(简单的jq代码)
- delphi pid判断进程结束_PHP7是如何实现多进程的?
- 1041. 考试座位号(15)-PAT乙级真题
- NetCore WebService XML Parse
- Python Flask Web 第六课 —— 静态文件
- 几组数据的相关性python_Python数据相关系数矩阵和热力图轻松实现(参数解释)...
- mysql动态sql语句_mysql 存储过程中使用动态sql语句
- PHP环境配置遇到的问题与解决
- 【转帖】2004年最一针见血的279句话
- Maya2011下载 (破解正式版)
- 科技云报道:科技巨头们为什么要“跨界造芯”?
- 《Recent Advances in Deep Learning for Object Detection 》笔记
- RISC-V E300 SOC架构介绍——1.总体介绍
- 地图标记(学习笔记)
- 芯片供应最难的居然是TI,交期拉长
- bbp代码python_如何正确计算加密债券价格的BBP(Bollinger波段百分比)?
- 2022北京智源大会中关村昇腾人工智能产业分论坛:汇聚智慧星火 构建AI新生态...
- 按键精灵两种方法对大漠进行注册regsvr32
热门文章
- 斗鱼实名认证 mysql_斗鱼扩展--DouyuRoom使用说明(十四)
- CSS3特效之转化(transform)和过渡(transition)
- 122 Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II
- bzoj 3456: 城市规划【NTT+多项式求逆】
- OI/ACM 刷题网站 人气OJ简介
- 单交换机VLAN虚拟局域网划分
- 16、用VS2005调试编译驱动程序
- [Xcode 实际操作]四、常用控件-(5)UILabel文本标签自定义文字样式
- P1903 [国家集训队]数颜色 / 维护队列
- android上使用蓝牙设备进行语音输入