我们有一个带有Microsoft Web Browser activex控件的MFC Dialog,用于显示网页。当页面包含silverlight时,您无法输入silverlight文本框。似乎鼠标和命令消息使它成为silverlight而不是wm_keydow / wm_keyup
答案 0 :(得分:0)
解决方法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控件 不拥有消息泵。该 消息泵由容器拥有 应用。所以,所有的 按键消息由 容器应用而不是 调度到无模式对话框 或propertyysheet窗口。
a不会出现问题 模态对话框/属性表窗口 因为消息泵归所有者所有 对话框管理器,它需要 小心处理所有按键 消息。 大段引用 来源http://support.microsoft.com/kb/187988