CDialog输入焦点

本文介绍了如何在MFC对话框中自定义输入焦点的方法。通常通过资源编辑器设置TabOrder来确定输入焦点顺序,但对于运行时动态指定焦点,则需覆写OnInitDialog函数并返回FALSE以使SetFocus函数生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果想自定义 CDialog的输入焦点,一种办法是可以通过VC自带的资源编辑器,设置Tab Order来指定哪个控件是在Tab order的顺序是第一。这种方法的好处是简单方便,但是无法动态指定输入焦点。

 

如果要根据一些运行时的情况来判断输入焦点,我们很容易想到调用空间的SetFocus函数,但是一般情况下这样是不管用的,输入焦点仍然是在Tab order排第一的那个控件上,为什么?因为MFC在初始化对话框时,会调用OnInitDialog函数,大多数情况下我们自定义一个对话框,都会覆写这个方法,如:

注意最后一句:return TRUE

原因就在这一句上。我们看一下MFC的框架代码:

看最底下的代码

在调用完初始化函数后,会判断OnInitDialog的返回值,如果返回的是TRUE,会继续调用设置输入焦点的代码,这个输入焦点就是根据Tab order中指定的第一个输入焦点的控件。

 

所以,要想在OnInitDialog中指定的输入焦点生效,那么我们就把OnInitDialog的返回值设成FALSE就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值