VC6의 CHtmlView에는 버그가 있어서 텍스트 입력에서 Tab, Del, Enter 키등이 동작하지 않는다.
VC7이상의 CHtmlView에서는 버그가 수정되었는데 PreTranslateMessage()를 오버라이딩함으로 해결하였다. VC6에서 해당 버그를 수정하려면 CHtmlView를 상속해서 VC7의 CHtmlView::PreTranslateMessage()로 PreTranslateMessage()를 오버라이딩하면 된다.
VC7이상의 CHtmlView에서는 버그가 수정되었는데 PreTranslateMessage()를 오버라이딩함으로 해결하였다. VC6에서 해당 버그를 수정하려면 CHtmlView를 상속해서 VC7의 CHtmlView::PreTranslateMessage()로 PreTranslateMessage()를 오버라이딩하면 된다.
BOOL CHtmlView::PreTranslateMessage(MSG* pMsg)
{
ASSERT(pMsg != NULL);
ASSERT_VALID(this);
ASSERT(m_hWnd != NULL);
{
ASSERT(pMsg != NULL);
ASSERT_VALID(this);
ASSERT(m_hWnd != NULL);
// allow tooltip messages to be filtered (skip CFormView)
if (CView::PreTranslateMessage(pMsg))
return TRUE;
if (CView::PreTranslateMessage(pMsg))
return TRUE;
// don't translate dialog messages when in Shift+F1 help mode
CFrameWnd* pFrameWnd = GetTopLevelFrame();
if (pFrameWnd != NULL && pFrameWnd->m_bHelpMode)
return FALSE;
CFrameWnd* pFrameWnd = GetTopLevelFrame();
if (pFrameWnd != NULL && pFrameWnd->m_bHelpMode)
return FALSE;
// call all frame windows' PreTranslateMessage first
pFrameWnd = GetParentFrame(); // start with first parent frame
while (pFrameWnd != NULL)
{
// allow owner & frames to translate
if (pFrameWnd->PreTranslateMessage(pMsg))
return TRUE;
pFrameWnd = GetParentFrame(); // start with first parent frame
while (pFrameWnd != NULL)
{
// allow owner & frames to translate
if (pFrameWnd->PreTranslateMessage(pMsg))
return TRUE;
// try parent frames until there are no parent frames
pFrameWnd = pFrameWnd->GetParentFrame();
}
pFrameWnd = pFrameWnd->GetParentFrame();
}
// check if the browser control wants to handle the message
BOOL bRet = FALSE;
if(m_pBrowserApp != NULL)
{
CComQIPtr<IOleInPlaceActiveObject> spInPlace = m_pBrowserApp;
if (spInPlace)
bRet = (spInPlace->TranslateAccelerator(pMsg) == S_OK) ? TRUE : FALSE;
}
BOOL bRet = FALSE;
if(m_pBrowserApp != NULL)
{
CComQIPtr<IOleInPlaceActiveObject> spInPlace = m_pBrowserApp;
if (spInPlace)
bRet = (spInPlace->TranslateAccelerator(pMsg) == S_OK) ? TRUE : FALSE;
}
return bRet;
}
}
'개발' 카테고리의 다른 글
크리티컬 섹션을 이용한 스레드 동기화 (0) | 2007.12.18 |
---|---|
실행 중인 IE창 모두 닫기 (0) | 2007.12.14 |
Windows Installer로 프로그램 추가/제거에서 안 보이게 설치하기 (0) | 2007.08.06 |
Visual C++로 XPCOM 컴포넌트 만드는 방법 (2) | 2007.07.19 |
COM 인터페이스 포인터를 서로 다른 Apartment로 전달하기 (0) | 2007.06.27 |
댓글