MFC Spin控件出现的一些奇怪的问题——Buddy Windows的问题

本文探讨了对话框中Spin控件自动吸附到TabOrder前一位控件的问题,包括吸附失败、显示异常等情况,并提供了调整TabOrder顺序的解决方案。

对话框里Spin控件会自动吸附到TabOrder在它前一位的控件上,很多时候添加控件的顺序乱掉了,例如从别的地方拷贝,或者修改过TabOrder的顺序而没有注意到Spin控件和它的配对Edit控件的顺序时。因此会造成很多奇奇怪怪的错误。

 

首先一个就是无法吸附到正确的控件上,临时的解决方法就是在OnInitDialog调用CSpinButtonCtrl::SetBuddy(CWin*) 函数程序直接指定。但是这会产生更多的问题。

 

问题多处在需要把AutobuddySet buddy integer打上钩的时候(大部分时候会需要的),当Spin控件的TabOrderEdit控件前面,那么就会出现吸附后的控件粘合处Spin控件在Edit控件前面,很碍眼。然后是控件有时会莫名其妙地缩短一截。这个问题的主要问题是Edit空间被吸附了两次,一次是它TabOrder紧接的那个Spin控件的自动吸附,一次就是在OnInitDialog里程序指定的Spin控件,这两个有可能是同一个。

 

然后呢,更变态的问题是可能会有一些控件莫名其妙地出现一个0,我碰到过很多次。一直没明白原因,临时的解决方案是,把那个控件剪切然后再粘贴,就不会了。但是有可能是另外一个控件又出现一个字符0……¥#·!其实问题就是Spin控件的自动吸附造成的,Spin总吸附TabOrder在它前一个的那个控件,一些可以显示字符的控件会受其控制而显示初始值0,例如Static TextGroup BoxCheck BoxRadio Button 都有可能中招。

 

其实解决方案很简单,点菜单Layout->Tab Order然后用鼠标点击控件调整TabOrder顺序为Edit控件在配对Spin的前面一个,那么以上症状就全部不会出现。

 

最后在MSDN CSpinButtonCtrl类说明看里看到这样的解释(及我的翻译):

To the user, a spin button control and its buddy window often look like a single control.

对于用户来说,步进按钮(spin button、翻动按钮等)和它的伙伴窗口(buddy window 要关联的窗口)可以看成一个控件来使用。

You can specify that a spin button control automatically position itself next to its buddy window,

用户可以将步进按钮放置在其关联窗口的下一个位置,以自动指定它们的关联。(这里的下一位置应该是TabOrder的序号)

and that it automatically set the caption of the buddy window to its current position.

然后步进按钮控件就会自动设定伙伴窗口的标题为它的当前位置。

 

MSDN里的位置也指的是控件在.rc文件里文本描述的顺序,也就是TabOrder显示出来的顺序。直接修改.rc文件里的控件顺序,就响应影响TabOrder,反之效果一样。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值