【问题标题】:CHtmlView class and focusCHtmlView 类和焦点
【发布时间】:2010-03-30 10:24:40
【问题描述】:

我有一个用 MFC 编写的 SDI 应用程序。使用拆分器窗口将框架分为 1 行和 2 列。下面是行和列的详细信息(R0C0 表示 Row#0 和 Col#0)

  1. R0C0 视图是一个 CFormView,具有多个输入控件,如文本框、组合框等。
  2. R0C1 视图是一个 CHtmlView,其中包含与在 R0C0 中具有输入焦点的控件相关的 HTML 内容

我能够更新 HTML 内容并通过我的 MFC 代码调用 Javascript 函数。

问题: 当用户单击 R0C1 时,继续 CHtmlView,焦点现在位于 html 页面上。我希望允许用户使用键盘从 R0C1 中跳出并返回到 R0C0。你能帮忙吗?用户显然可以使用鼠标单击 R0C0 视图,但我们有一个用户需要使用键盘才能使用此功能。

如果问题描述性不够,请告诉我,我会进一步简化。

珍惜你的时间。

谢谢, 字节

【问题讨论】:

    标签: c++ html mfc webbrowser-control


    【解决方案1】:

    尝试重载 CHtmlView::OnTranslateAccelerator。我已经成功地使用了这个技巧来禁用 F5 键刷新。从 CHtmlView 派生你自己的类并重载

    virtual HRESULT OnTranslateAccelerator(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID);
    

    像这样:

    HRESULT CMyHtmlView::OnTranslateAccelerator(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID)
    {
        if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_TAB) != 0 )
        {
            // change focus
            return S_OK;
        } 
        return CHtmlView::OnTranslateAccelerator( lpMsg, pguidCmdGroup, nCmdID);
    }
    

    【讨论】:

    • FenchKiss 开发者,感谢您的回答。我将看看如何在我的应用程序上下文中使用您的方法。我目前正在使用不同的方法。我已将我的 CHtmlView 派生类附加为 HTMLDocumentEvents2 的事件接收器。这样我会收到文档中每个元素的点击、聚焦等事件。当焦点到达页面中的特定元素时,我会将焦点设置到另一个视图。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多