【发布时间】:2011-04-30 05:28:57
【问题描述】:
我们有一个带有 Microsoft Web Browser activex 控件的 MFC 对话框,用于显示网页。当页面包含 silverlight 时,您无法在 silverlight 文本框中键入内容。似乎鼠标和命令消息可以发送到 silverlight,但不能发送到 wm_keydow/wm_keyup
【问题讨论】:
标签: silverlight mfc
我们有一个带有 Microsoft Web Browser activex 控件的 MFC 对话框,用于显示网页。当页面包含 silverlight 时,您无法在 silverlight 文本框中键入内容。似乎鼠标和命令消息可以发送到 silverlight,但不能发送到 wm_keydow/wm_keyup
【问题讨论】:
标签: silverlight mfc
解决方法 1 - 将 Silverlight 应用程序的 html 对象更改为“无窗口”:
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="webConnectSilverlightApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<param name="windowless" value="true"/>
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
解决方法 2 - 覆盖 WebViewer 对话框类中的 PreTranslateMessage 以覆盖错误:
BOOL CMFC_WebViewerDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_CHAR)
{
DispatchMessage(pMsg);
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
可能的原因
问题在于 ActiveX 控件 不拥有消息泵。这 消息泵归容器所有 应用。因此,所有 击键消息由 容器应用程序而不是 分派到无模式对话框 或属性表窗口。
问题不会发生在 模态对话框/属性表窗口 因为消息泵由 对话框管理器,它需要 照顾处理所有击键 消息。 块引用 来源http://support.microsoft.com/kb/187988
【讨论】: