클라이언트 어플리케이션을 작성하다 보면 웹 페이지를 어플리케이션 내에서 호스팅 해야 할 경우가 생긴다. 이럴 경우 키보드의 단축키를 어플리케이션 내에서 먼저 잡아서 처리하므로 웹 페이지에서는 단축키가 안 먹는다. 대표적으로 Tab, Delete, Return, Ctrl+A, Ctrl+C, Ctrl+X, Ctrl+V 등이 있다.
웹 페이지만 따로 띄워서 보면 위의 키들이 다 잘 작동하나 어플리케이션 내에서 웹 페이지를 호스팅 하는 경우는 많이 사용하는 키임에도 불구하고 작동을 하지 않는다. 이럴 경우에는 어플리케이션의 PreTranslateMessage에서 웹 페이지로 단축키를 넘겨주면 된다.
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN )
{
TRACEMSG(1, _T("KeyDown: 0x%x"), pMsg->wParam) ;
if ( pMsg->wParam == VK_DELETE || pMsg->wParam == VK_TAB || pMsg->wParam == VK_RETURN)
{
return SendAcceleratorToWeb(pMsg) ;
}
if( pMsg->wParam == 'A' || pMsg->wParam == 'C' || pMsg->wParam == 'X' || pMsg->wParam == 'V' )
{
// Ctrl 키가 눌러져 있다면... 다른 키의 조합은 & 으로 하면 된다.
// GetKeyState( VK_CONTROL & VK_SHIFT )
if( GetKeyState( VK_CONTROL ) < 0 )
return SendAcceleratorToWeb(pMsg);
}
}
return CWindow::IsDialogMessage(pMsg) ;
}
BOOL SendAcceleratorToWeb( MSG* pMsg )
{
CComQIPtr<IOleInPlaceActiveObject, &IID_IOleInPlaceActiveObject> pIOIPAO(m_spWebBrowser) ;
HRESULT hr = S_FALSE ;
if( pIOIPAO )
{
hr = pIOIPAO->TranslateAccelerator(pMsg) ;
}
return ( hr == S_OK ? TRUE : FALSE );
}
'개발지식창고 > ActiveX' 카테고리의 다른 글
익스플로러 현재 모든 url 가져오기 (0) | 2010.09.08 |
---|---|
ActiveX 자동 업데이트 하는 방법 (0) | 2010.08.24 |
HTML 이벤트 Sink (0) | 2010.08.22 |
CWebBrowser2 (웹브라우저) 컨트롤에서 스크롤바 없애기 (0) | 2010.08.22 |
BHO 레지스트리 (0) | 2010.08.22 |