0

调用更改 QAxWidget 的 GUI 的函数会使调用者失去焦点。我怎样才能避免这种情况?

4

1 回答 1

0

某些操作使 Windows 将活动窗口状态转移到另一个窗口/应用程序。当您触发其中之一时,您的 ActiveX 应用程序将变为活动状态,因此您会失去对客户端应用程序的关注。

为了避免这种情况,可以编写一个范围保护,在 Windows错误地转移活动状态后将焦点重置到您的客户端:

class AxFocusScopeGuard
{
public:
    AxFocusScopeGuard(QWidget* parentWidget)
        : m_focusedWidget(parentWidget->focusWidget())
    { }

    ~AxFocusScopeGuard()
    {
        QCoreApplication::processEvents();
        if(m_focusedWidget)
            m_focusedWidget->setFocus();
    }

private:
    QWidget* m_focusedWidget = nullptr;
};


void ActiveXCallHandler::updateGuiActiveX()
{
    AxFocusScopeGuard guard(m_parentWidget);
    axWidget->dynamicCall("updateYourGui()");
}
于 2020-04-29T12:48:02.863 回答