在我的應用程序中,我有一個嵌入式MSHTML控件。問題是我無法把重點放在這個控制上。我可以點擊,選擇,按下按鈕等,但它不會接受鍵盤輸入和鼠標滾輪通知。即使左鍵單擊控件也不會設置焦點。 (該問題與this issue.有關)將焦點設置爲嵌入式MSHTML
最終,我嘗試了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();
這一次,我從焦點()獲得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();
什麼都不做。
我已經花了一整天的時間了,現在就知道谷歌的鏈接了:)希望得到專家的提示。
感謝您分享您的解決方案。我希望你給我的線索可以幫助我解決問題。 http://social.msdn.microsoft.com/Forums/en/wpf/thread/1b50fec6-6596-4c0a-9191-32cd059f18f7 – jpierson 2010-11-10 19:07:13