ActiveX控件键盘消息无法响应 ATL COM

最近使用ATL创建了一个复合控件,想在其上面相应Delete的键盘消息,但发现直接响应WM_KEYDOWN消息竟然没反应,事情是这样的:

1.起初我直接添加消息WM_KEYDOWN的响应函数,键盘按下,此函数不响应。

2.无奈我又使用preTranslateMessage函数来拦截键盘消息,但只有少部分按键(如功能键、空格键)可以响应。

3.随之我觉得使用钩子一定可以,但效果还是没有出来,钩子没有响应Delete按键的消息....

苦思冥想,,,不知道Wnd中发生了什么事情,使得ActiveX中WM_KEYDOWN没法响应。

4.后来我用了一个最土的方法,土炮....

我认为如果focus在按钮或编辑框上,窗口一定会响应WM_KEYDOWN消息,抱着试一试的方法,在控件上添加了一个按钮,并在初始化窗口的时候对其MoveToWindow(0,0,0,0)让它看不见,并使用SetFocus对其进行focus,要确保你想要相应键盘消息的时候该按钮处于focus状态,简单的你可以在OnPaint函数最后对其SetFocus,然后用钩子捕获键盘消息,呵呵,问题解决了。

5.在在在后来我发现可以使用SetWindowLong来改变窗口过程,我想这下可以响应键盘消息了吧,没想到奇迹还是没有出现。

如果哪位大师看到此文,并理解为什么ActiveX不能直接响应WM_KEYDOWN消息的请指教,谢谢!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值