描述:
用ATL,建了一个BHO 的CATID_CommBand,在这个Band中加创建一个webbrowser控件,用于显示html页面
BHO成功创建,html页面也正常显示,不过在html页面的输入框修改输入的字符时,按回退键,会启动一个新的IE实例,
按delete键不能删除光标后的字符,其他按键正常
请问大家怎么解决,很急,谢谢!
解决方案1:
不需要这么麻烦,在TranslateAcceleratorIO中处理就行了。
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003JUL.1033/shellcc/platform/shell/programmersguide/shell_adv/bands.htm
http://topic.csdn.net/t/20031217/11/2572778.html
http://topic.csdn.net/t/20060312/18/4609530.html
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case VK_BACK:
{
// ::PostMessage(GetFocus(),WM_KEYUP,wParam,lParam); 此行注释掉
//这样就不会打开新的IE实例,不过,怎样才能让它能够删除GetFocus()框的字符
// 以下是伪代码
MSG msg;
msg.message = WM_KEYUP;
msg.wParam = wParam;
msg.lParam = lParam;
if (GetFocus()是你的浏览器窗口或者你的浏览器窗口的子窗口)
{
IWebBrowser2::QueryInterface 得到 IOleInPlaceActiveObject*
if (IOleInPlaceActiveObject::TranslateAccelerator(&msg))
return 1;
}
//return 1; 此行注释掉
break;
}
}
LRESULT RetVal = CallNextHookEx( m_hook, nCode, wParam, lParam );
return RetVal;
}
是的,键盘消息被IE自己捕获了,你应该HOOK键盘消息,做处理