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消息的请指教,谢谢!

猜你喜欢

转载自blog.csdn.net/fripy/article/details/8769714