저도 옛날에 그것때문에 많이 고생을 했었습니다.
그거는 아마도 explorer에서 방향키를 Activex로 안보내주더라고요..
그래서 겨우 생각해 낸것이 Hooking을 이용하는 것입니다.
아마 activex내에서가 아니라 activex내의 CEdit에서 후킹을 하려면,
좀 쉬어져서요..
CEdit의 SetFocus와 KillFocus의 Event에서 SetHook을 해주시면 될
거에요..
물론 후킹함수는 dll로 만들어야 겠지요..
dll에서 SetKeyboardHooking에서 WH_KEYBOARD를 잡고요..
SendMessage를 발생시켜 CEdit로 보내주시면 될거에요..
먼저 ActiveX를 둘러싸는 class를 CXXCtrl로 가정하고 설명합니다.
1. class wizard에서 WM_MOUSEACTIVATE 메시지에 대한 핸들러를 만듭니다.
2. OnActivateInPlace(TRUE, NULL); 이라는 문장을 1에서 만든 함수에 작성한다.
3. OnActivateInPlace(TRUE, NULL); 이라는 문장을 OnCreate()함수에 작성한다.
4. 이것만 하면 backspace를 정상적으로 동작한다.
5. 방향키 작동을 위해서 다음과 같은 코드를 작성한다.
BOOL CXXCtrl::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message) {
case WM_KEYDOWN:
case WM_KEYUP:
switch (pMsg->wParam) {
case VK_LEFT:
case VK_RIGHT:
case VK_TAB:
m_pCalendar->m_StoryEdit.SendMessage(pMsg->message,
pMsg->wParam,
pMsg->lParam);
return TRUE;
}
break;
}
return COleControl::PreTranslateMessage(pMsg);
}
6. 위의 코드는 실제 에디트 박스에 메시지를 날리는 함수입니다.
7. 그래도 작동되지 않으면 저에게 바로 메일 날리세용...