Поддержка клавиши табуляции в элементе управления IWebBrowser2
У меня есть встроенный элемент управления IWebBrowser2, использующий прямой C++ (с окнами, а не без окон), и когда кто-то нажимает клавишу Tab для перехода между полями в браузере, он выпрыгивает из веб-браузера.
Любые идеи о том, что мне нужно реализовать или что я могу облажаться?
Спасибо!
2 ответа
Решение
Клавиши акселератора, такие как табуляция, обрабатываются циклом сообщений перед отправкой. Как таковая функция ловушки должна вызываться циклом сообщений - IOleInPlaceActiveObject:: TranslateAccelerator iirc. - дать элементу управления возможность делать вещи типа клавиатуры.
Я решил эту проблему по ссылке ниже.
IWebBrowser2* iBrowser;
IOleInPlaceActiveObject* pIOIPAO;
hr = mpWebObject->QueryInterface(IID_IWebBrowser2,(void**)&iBrowser);
if ( SUCCEEDED(hr) )
{
iBrowser->QueryInterface(IID_IOleInPlaceActiveObject,(void**)&pIOIPAO);
if ( SUCCEEDED(hr) )
{
pIOIPAO->TranslateAccelerator(msg);
pIOIPAO->Release();
}
iBrowser->Release();
}