IWebBrowser2控件中快捷键、TAB等无效的解决办法
发布时间:2017年12月3日 作者:未知 查看次数:1086
IWebBrowser2控件中,Ctrl+V、TAB等键无效。经查找: IWebBrowser2控件快捷键,DEL,TAB等无效的解决办法 http://www.hoverlees.com/blog/?p=1056 在普通情况下,IWebBrowser2控件加入到窗口中时,浏览器的快捷键,包括DEL,TAB等特殊键都不能使用。这个不是控件的Bug,而是一种特性。要让控件处理这些按键,需要通过webBrowser插件的IOleInPlaceActiveObject来处理。 具体操作是在主窗口的事件循环里处理。步骤如下:
C语言使用者在QueryInterface和调用COM对象函数时,可以用我另一编关于COM的C调用的函数库。 ============================================== 具体取IWebBrowser2的IOleInPlaceActiveObject如下: (IWebBrowser2* iWebBrowser; ) ---- IOleInPlaceActiveObject *m_pInPlaceAcObj; //对象 iWebBrowser->QueryInterface(IID_IOleInPlaceActiveObject,(void**)&m_pInPlaceAcObj); m_pInPlaceAcObj->TranslateAccelerator(&msg); ---- 代码: ============================================== 可是这样发现所有输入的字符都重复2次,包括Backspace键,左右箭头键。 将TranslateMessage移到DispatchMessage前面,发现输入字符不重复了,但Backspace等键仍有两次作用。 只好用VK_UP等过滤。 代码如下: int bMsgRet; IOleInPlaceActiveObject *m_pInPlaceAcObj; //对象 iWebBrowser->QueryInterface(IID_IOleInPlaceActiveObject,(void**)&m_pInPlaceAcObj); while(bMsgRet=GetMessage(&msg, NULL, 0, 0)!=0) { if(-1==bMsgRet)break; if(IsDialogMessage(hWebWnd,&msg)){ if((msg.wParam == VK_UP) || (msg.wParam == VK_DOWN)|| (msg.wParam == VK_LEFT) || (msg.wParam == VK_RIGHT) || (msg.wParam == VK_BACK)) { } else { m_pInPlaceAcObj->TranslateAccelerator(&msg); } } else { TranslateMessage(&msg); DispatchMessage(&msg); } } ================================ 不知是什么原因。 望能有好的方法请指教。
|
||
|