gpt4 book ai didi

mshtml - 将焦点设置为嵌入式 MSHTML

转载 作者:行者123 更新时间:2023-12-01 15:23:46 26 4
gpt4 key购买 nike

在我的应用程序中,我有一个嵌入式 MSHTML 控件。问题是我无法将焦点设置到此控件。我可以单击、选择、按下按钮等,但它不会因此接受键盘输入和鼠标滚轮通知。即使在控件上单击鼠标左键也不会设置焦点。 (问题与this issue.有关)

最终,我尝试了 4 种方法。 (为简洁起见,这里省略了错误处理。)首先是向控件发送 WM_SETFOCUS。

HWND iehwnd = ::FindWindowEx (m_oleObjectHWND, NULL, 
L"Shell DocObject View", NULL);
if(iehwnd != NULL)
{
iehwnd = ::FindWindowEx (iehwnd, NULL, L"Internet Explorer_Server", NULL);
if(iehwnd != NULL)
{
::PostMessage(iehwnd, WM_SETFOCUS, (WPARAM)GetHWND(), NULL);
}
}

使用 Winspector,我确保消息到达控件的窗口,但它似乎忽略了它们。

第二个是调用 IHtmlWindow2 的 focus() 方法。

    IHTMLDocument2* pHTMLDoc2 = NULL;
m_webBrowser->get_Document((IDispatch**)&pHTMLDoc2);

IHTMLWindow2* pWindow = 0;
pHTMLDoc2->get_parentWindow(&pWindow);
pWindow->focus();

这一次,我从 focus() 得到了 E_FAIL。

MSDN 表示当文档未加载时调用可能会失败,但 pHTMLDoc2->get_readyState() 返回“完成”。所以情况并非如此。

第三个是做 UIACTIVATE 动词。

    hret = m_oleObject->DoVerb(OLEIVERB_UIACTIVATE, NULL, 
clientSite, 0, (HWND)GetHWND(), &posRect);

这似乎一事无成。

第四是调用IHtmlDocument4的focus()

    IDispatch* pdisp = NULL;
m_webBrowser->get_Document((IDispatch**)&pdisp);

IHTMLDocument4* pHTMLDoc4 = NULL;
pdisp->QueryInterface(IID_IHTMLDocument4, (void**)(&pHTMLDoc4));

pHTMLDoc4->focus();

什么都不做。

我已经在这上面花了一整天,现在已经熟记谷歌的链接 :) 希望得到专家的提示。

最佳答案

终于找到了。

我代码中的这个函数(或者更确切地说是 wxWidgets 库的 IEHtmlWin 组件)返回了 S_FALSE。我将返回代码更改为 S_OK - 瞧……

HRESULT FS_IOleInPlaceSiteWindowless::RequestUIActivate(){ 返回 S_OK;

关于mshtml - 将焦点设置为嵌入式 MSHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com