VC的Spin控件和edit控件

edit+spin
对于这类型的控件,我以为是一个整体,应该是edit的一种不同风格,今天找了半天也没发现有现成的这类型的控件。后来网上查找,发现这是edit和spin控件的组合形式。下面介绍一下具体的实现过程。

在对话框项目中,随意绘制多个edit和spin控件。
这里写图片描述
第一步
就是要关联edit和spin。
关联的方式可以是代码实现(用到setbuddy函数)也可以是在控件的属性中设置。此处我们在属性设置中关联。修改spin控件的以下三处属性:
这里写图片描述
此时,spin控件就具备了自动关联的特性,但是这种特性是在teb顺序有一定规律的基础上才会,按照预期进行关联。
按住ctrl+D,出现下图所示:
这里写图片描述
我已经将tab顺序调整一致,那么,spin会和tab顺序在它前一个的编辑框相关联。这样就实现了对应关系。

第二步
将编辑框的属性Number设置为true,并为其添加value变量。

第三步
给编辑框或者spin添加消息响应。
edit的目的是获取用户的输入,所以编辑的内容改变时我们就需要用UpdateData函数将内容更新到控件的关联变量中。那么,在哪个函数调用UpdateData呢,此处我们可以给编辑框添加EN_CHANGE的消息也可以给spin控件添加UDN_DELTAPOS消息。

不管添加哪一种消息,我们现在面对一个困扰就是——总不能为每个控件都添加消息响应吧,这回显得太繁琐,MFC有解决途径那就是两个宏,ON_CONTROL_RANGE和ON_NOTIFY_RANGE(似乎还有一个ON_COMMAND_RANGE,现在还不知这三个宏的具体区别,不过我猜测应该是响应不同的消息类型),对于对个edit控件我们可以用ON_CONTROL_RANGE宏,它有四个参数,第一个参数是消息的ID,第一个参数是多个edit控件中ID最小的那个控件的ID号,第三个参数是id最大的那个edit控件的id(注意,这些edit控件id必须连续才能保证所有edit控件都会去响应我们的函数,对另一个宏也是一样的)。第四个参数是要响应的函数,这个函数必须满足规定的形式,如下:
afx_msg void procname(UINT id)
那么在这个函数中,我们可以进行更新操作。

对于ON_NOTIFY_RANGE宏,也是同样的用法,可以将多个spin控件绑定在这个宏上(ON_CONTROL_RANG不适用spin控件的通知消息),但这个函数的第四个参数要求的响应函数格式和前一个有区别。格式如下:
afx_msg void procname(UINT , NMHDR*,LRESULT*)
同样在这个函数中也可以进行需要的操作。

最后 忘记了重要一点
根据自己的项目为spin控件设置范围(在不设置的时候,点向下的按钮会使数字变大 这是因为 默认情况下, spin控件的范围是100-0,所以操作正好相反),设置范围用SetRange函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值