mfc activex webbrowser 控件中托管的 silverlight 控件无法获取按键输入

发布于 2024-11-03 21:24:39 字数 469 浏览 1 评论 0原文

我们有一个带有 Microsoft Web 浏览器 activex 控件的 MFC 对话框,用于显示网页。当页面包含 silverlight 时,您无法在 silverlight 文本框中键入内容。似乎鼠标和命令消息使它成为 silverlight,但没有 wm_keydow/wm_keyup

引用到 microsoft connect 问题 https://connect.microsoft.com/VisualStudio/feedback/details/536872/silverlight-3 -在 Microsoft Web 浏览器对象中运行时无法在文本框中键入

We have a MFC Dialog with the Microsoft Web Browser activex control for displaying web pages. When a page contains silverlight you cannot type into the silverlight text box. It seems as though mouse and command messages make it to silverlight but not the wm_keydow/wm_keyup

refrance to the microsoft connect issue https://connect.microsoft.com/VisualStudio/feedback/details/536872/silverlight-3-cannot-type-in-textbox-when-running-in-microsoft-web-browser-object

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

面犯桃花 2024-11-10 21:24:39

解决方法 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

Workaround 1 - alter the html object for the Silverlight application to be "windowless":

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

Workaround 2 - override PreTranslateMessage in WebViewer dialog class to override the bug:

BOOL CMFC_WebViewerDlg::PreTranslateMessage(MSG* pMsg)
{
     if (pMsg->message == WM_CHAR)
     {
             DispatchMessage(pMsg);
             return true;
     }

     return CDialog::PreTranslateMessage(pMsg);
}

The probable cause

The problem is the ActiveX control
doesn't own the message pump. The
message pump is owned by the container
application. Therefore, all the
keystroke messages are taken by the
container application and not
dispatched to the modeless dialog box
or propertysheet window.

The problem does not occur with a
modal dialog box/propertysheet window
because the message pump is owned by
the dialog box manager, and it takes
care of handling all keystroke
messages.
Blockquote
source http://support.microsoft.com/kb/187988

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文