2011/03/28

TCppWebBrowser Enter 키에 반응하기

C++ Builder 로 간단한 프로그램을 만들던 중 TCppWebBrowser 컨트롤이 Enter 키에 대한 반응이 동작을 하지 않는 경우가 많았다. 그래서 해결 책을 찾아 보았다. 이미 오래전부터 문제가 되었던 것으로 보이는데 해결책도 나와 있었다.

//Header

IOleInPlaceActiveObject *FOleInPlaceActiveObject;
void __fastcall MyMessageHandler(TMsg &Msg, bool &Handled);


//Source

__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
OleInitialize(NULL);
Application->OnMessage = MyMessageHandler;
}

void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
OleUninitialize();
}

void __fastcall TfrmMain::MyMessageHandler(TMsg &Msg, bool &Handled)
{
Handled = IsDialogMessage(WebBrowser->Handle, &Msg) == true;

if(!Handled || WebBrowser->Busy)
{
return;
}

if ( (Msg.message==WM_KEYDOWN || Msg.message==WM_KEYUP) &&
(Msg.wParam==VK_RETURN || Msg.wParam==VK_TAB) )
{
if(FOleInPlaceActiveObject != NULL)
{
FOleInPlaceActiveObject->TranslateAccelerator(&Msg);
}
else
{
IDispatch *Dispatch = WebBrowser->Application;
if(Dispatch != NULL)
{
IOleInPlaceActiveObject *iOIPAO;
Dispatch->QueryInterface(IID_IOleInPlaceActiveObject, (LPVOID *)&iOIPAO);

if( iOIPAO != NULL )
{
FOleInPlaceActiveObject = iOIPAO;
FOleInPlaceActiveObject->TranslateAccelerator(&Msg);
}
}
}
}
}




출처 : 볼랜드 포럼

No comments :

Post a Comment