ocx 在 IE中的消息传递是咋回事
ocx 在 IE中的消息传递是怎么回事?
我自己做了一个ActiveX控件,基于一个对话框来做的,在对话框上有编辑框和按钮等东西。我修改PreTranslateMessage来获取WM_LBUTTONDOWN和WM_LBUTTONUP消息。在容器测试中测试这个控件,是可以获取到的,但是在IE中,却无法获取到这个消息,一跟踪,原来PreTranslateMessage都没有被调用。
网上看了些资料,说IE中虽然激活了控件中的子控件,但是不会激活控件本身,所以消息得不到传递。
修改了如下
OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if (!m_bUIActive)
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
但还是没有去调用这个消息。
大家是否有遇到这个情况,如何解决。
另外,在IE中,鼠标的消息是如何经ie,到控件,到每一个子控件的,哪位大侠清楚这个消息的传递流程啊
------解决方案--------------------
在IE 里创建的控件可能是windowless的,你不应该在PreTranslateMessage消息里做,而应该在
消息影射宏里来处理是不会有问题的。
BEGIN_MSG_MAP(xxx)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
END_MSG_MAP()
我自己做了一个ActiveX控件,基于一个对话框来做的,在对话框上有编辑框和按钮等东西。我修改PreTranslateMessage来获取WM_LBUTTONDOWN和WM_LBUTTONUP消息。在容器测试中测试这个控件,是可以获取到的,但是在IE中,却无法获取到这个消息,一跟踪,原来PreTranslateMessage都没有被调用。
网上看了些资料,说IE中虽然激活了控件中的子控件,但是不会激活控件本身,所以消息得不到传递。
修改了如下
OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if (!m_bUIActive)
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
但还是没有去调用这个消息。
大家是否有遇到这个情况,如何解决。
另外,在IE中,鼠标的消息是如何经ie,到控件,到每一个子控件的,哪位大侠清楚这个消息的传递流程啊
------解决方案--------------------
在IE 里创建的控件可能是windowless的,你不应该在PreTranslateMessage消息里做,而应该在
消息影射宏里来处理是不会有问题的。
BEGIN_MSG_MAP(xxx)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
END_MSG_MAP()