프로그래밍/VC++

ActiveX 콘트롤안에 있는 CEdit에서 백스페이스가 안먹힐때.

panpro 2006. 8. 28. 11:04
2002-01-08 오전 9:29:00   /  번호: 163960  / 평점: ///////// (-) category: ActiveX/COM  /  조회: 2,002
[Q]ActiveX콘트롤안에 있는 CEdit에서는 백스페이스나 방향키가 안먹네요.../ 한영희 / toaamf
한영희님께 메시지 보내기  한영희님을 내 주소록에 추가합니다.  한영희님의 블로그 가기   

웹페이지 안에 Activex콘트롤을 삽입시켰습니다.
그 Activex콘트롤 안에는 CEdit을 이용하여 에디터 창을 생성해 놓았는데요..

에디터창에서 백스페이스나, 방향키등이 안먹네요..
KeyEvent를 받는 처리를 해줘야 한다고 하는데, 그걸 어떻게 처리해야 하는 지모르겠네
요..
CEdit에서 KeyEvent를 연결할순 있을 것같은데, 연결한 함수에서 어떤 처리를 해야 하는
지 모르겠습니다.

에디터창이 웹페이지에 아예 들어있는 경우입니다.
모양을 보시려면, http://my.dreamwiz.com/webp/x   에 가보시면 됩니다..

이 글에 평점 주기:  
2002-01-08 오전 9:50:00   /  번호: 163965  / 평점: ///////// (-)
/[허접답변]윤보현 / yoonbo
윤보현님께 메시지 보내기  윤보현님을 내 주소록에 추가합니다.  윤보현님의 블로그 가기   
저도 옛날에 그것때문에 많이 고생을 했었습니다.
그거는 아마도 explorer에서 방향키를 Activex로 안보내주더라고요..

그래서 겨우 생각해 낸것이 Hooking을 이용하는 것입니다.
아마 activex내에서가 아니라 activex내의 CEdit에서 후킹을 하려면,
좀 쉬어져서요..
CEdit의 SetFocus와 KillFocus의 Event에서 SetHook을 해주시면 될
거에요..
물론 후킹함수는 dll로 만들어야 겠지요..
dll에서  SetKeyboardHooking에서 WH_KEYBOARD를 잡고요..
SendMessage를 발생시켜 CEdit로 보내주시면 될거에요..

답변이 되었는지 모르겠네요...
모르시겠으면 멜 보내세요
이 글에 평점 주기:  
2002-01-08 오전 10:53:00   /  번호: 163991  / 평점: ///////// (-)
       /답변 감사드립니다..^^/ 한영희 / toaamf
한영희님께 메시지 보내기  한영희님을 내 주소록에 추가합니다.  한영희님의 블로그 가기   

메시지 후킹을 어떻게 하는 지 몰라서
그것부터 공부해야겠네요..^^;

이 글에 평점 주기:  
2002-01-08 오후 5:29:00   /  번호: 164162  / 평점: ///////// (-)
/답변드립니다.박영일 / yipark
박영일님께 메시지 보내기  박영일님을 내 주소록에 추가합니다.  박영일님의 블로그 가기   
먼저 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. 그래도 작동되지 않으면 저에게 바로 메일 날리세용...

이 글에 평점 주기:  
2002-01-08 오후 7:03:00   /  번호: 164211  / 평점: ///////// (-)
       /와~ 정말 멋지네요.../ 한영희 / toaamf
한영희님께 메시지 보내기  한영희님을 내 주소록에 추가합니다.  한영희님의 블로그 가기   


정말 명쾌한 답변에 감사드립니다..
하루종일 찾아 헤매었었는데, 한번에 해결됐습니다..

진심으로 감사드립니다.. ^^