在mfc activex webbrowser控件中托管的silverlight控件没有得到关键输入

时间:2011-04-30 05:28:58

标签: silverlight mfc

我们有一个带有Microsoft Web Browser activex控件的MFC Dialog,用于显示网页。当页面包含silverlight时,您无法输入silverlight文本框。似乎鼠标和命令消息使它成为silverlight而不是wm_keydow / wm_keyup

解决微软连接问题https://connect.microsoft.com/VisualStudio/feedback/details/536872/silverlight-3-cannot-type-in-textbox-when-running-in-microsoft-web-browser-object

1 个答案:

答案 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