不调用:IOleInPlaceFrameWindow 接口的
STDMETHOD(TranslateAccelerator)(LPMSG , WORD ) 方法。
IOleControlSite接口的
STDMETHOD(TranslateAccelerator)(MSG* pMsg, DWORDgrfModifiers);
STDMETHODIMP CActiveXCtrl::TranslateAccelerator(MSG *pMsg, DWORDgrfModifiers)
{
TRACE(_T("AX: CActiveXCtrl::TranslateAccelerator"));

returnS_FALSE;
}
IDocH ostUIHandler 接口:
STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID*pguidCmdGroup, DWORD nCmdID);
STDMETHODIMP CActiveXCtrl::TranslateAccelerator(LPMSG lpMsg, constGUID* pguidCmdGroup, DWORD nCmdID)
{
if( m_pOwner== NULL ) return E_UNEXPECTED;
HRESULT hr =S_FALSE;
if(m_pOwner->m_HostUIHandler != NULL)
m_pOwner->m_HostUIHandler->TranslateAccelerator(lpMsg,pguidCmdGroup, nCmdID);
returnhr;
}
UIManager.cpp
bool CPaintManagerUI::TranslateAccelerator(LPMSG pMsg)
{
for (int i =0; i < m_aTranslateAccelerator.GetSize(); i++)
{
LRESULTlResult = static_cast<ITranslateAccelerator*>(m_aTranslateAccelerator[i])->TranslateAccelerator(pMsg);
if( lResult== S_OK ) return true;
}
returnfalse;
}
UIWebBrowser.cpp
LRESULT DuiLib::CWebBrowserUI::TranslateAccelerator( MSG *pMsg)
解决多个UIWebBrowser快捷键问题,先由UIManager的translateAccelerator方法内调用UIWebBrowser中的TranslateAccelerator方法,来调用IOleInPlaceActiveObject接口的translateAccelerator方法,处理。
这里处理的返回结果很重要.