程序里有一个Dialog,运行时会new一个自定义的CTabCtrl,在这个CTabCtrl中会new一个CWnd,然后这个CWnd会CreateControl一个WebBrowser,最后,这个WebBrowser会导航到某一个页面。
现在发现当焦点在WebBrowser浏览的页面上的时候,如果按下Tab键,焦点会直接跳转到Dialog的其他控件上。
请问如何才能防止焦点从子控件跳出到父控件,让它在WebBrowser浏览的页面内跳转呢。PS:如果是在Dialog中直接拉一个WebBrowser,就不会出这样的问题~~
现在发现当焦点在WebBrowser浏览的页面上的时候,如果按下Tab键,焦点会直接跳转到Dialog的其他控件上。
请问如何才能防止焦点从子控件跳出到父控件,让它在WebBrowser浏览的页面内跳转呢。PS:如果是在Dialog中直接拉一个WebBrowser,就不会出这样的问题~~
捕捉tab按键消息,当焦点在web时不再往下传,直接返回,这样父窗口就不会收到tab按键消息
而且就算能枚举到页面内的元素,如果当前焦点在页面的最后一个控件上,应该还是会跳出来吧~
刚才说错了,当返回FALSE的时候,还是会跳出到父控件。只有当返回TRUE的时候才不会跳出,但子控件自身也不会响应。
应该是在本控件处理完之后来捕捉,然后返回true,截断消息链
{
IOleInPlaceActiveObject* pActiveObject; // 从浏览器控件查询这个接口
if (pActiveObject->TranslateAccelerator(lpMsg) == S_OK) // 给控件机会处理键盘鼠标消息
return TRUE;
return __super::PreTranslateMessage(lpMsg);
}