GetNextDlgTabItem

本文描述了一个关于窗口失去焦点后,内部控件无法正确获取焦点的bug。通过分析发现是由于某个ActiveX控件未设置WS_EX_CONTROLPARENT属性导致。文章提供了问题的背景、解决方案及可能的原因。

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

推荐一遍关于tab焦点的文章.

http://blogs.msdn.com/oldnewthing/archive/2004/07/30/201988.aspx

 

遇到一个很奇怪的bug

当窗口在失去焦点的时候,窗口里面的各个自控件不停的获取WM_GETDLGCODE消息

 

下断后看堆栈

在USER32的SetDefaultFocus中死循环.看起来是当窗口失去焦点的时候,重新设置默认焦点,也就是第一个tab order的时候,找不到对应的控件.

 

为啥会找不到呢,费了老鼻子劲

在上面THE OLD NEW THING中找到答案了

 

文章说实话,我看了一知半解.不过按照上面所讲的办法,问题是解决了.

应该是某个ACTIVEX控件没有设置WS_EX_CONTROLPARENT属性.

如果你点击了ACTIVEX,导致ACTIVEX获取了焦点.但是当窗口在失去焦点的时候.

从获取焦点的控件里面去找start point,即调用GetNextDlgTabItem会找不到start point.

因为控件没有设置WS_EX_CONTROLPARENT.系统默认把控件作为一个大的控件来处理.

 

不知道俺说的明白不,反正我也是没弄明白.当失去焦点的时候关于窗口焦点的一系列动作.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值