2012-07-31 4 views
0

Firebreath를 사용하여 창없는 플러그인을 개발 중이므로 추가 처리를 위해 특정 메시지를 잡기 위해 할 수 있지만 나머지 메시지는 사라집니다. "나는 생각한다.Internet Explorer_Server (IE9)의 Windows 메시지 처리

나는 메시지 루프 훅이 코드가 있습니다

bool myPlugin::onWindowAttached(FB::AttachedEvent *evt, FB::PluginWindow* pluginwin) 
{ 
    FB::PluginWindowlessWin* win = dynamic_cast<FB::PluginWindowlessWin*>(pluginwin); 

    FBLOG_INFO("", win->getHWND()); //getHWND returns the HWND of the Internet Explorer_Server window (get by using Spy++) 

    SubclassWindow(win->getHWND(), (WNDPROC)&myPlugin::WndProc); 
    return true; 
} 

을 그리고 이것은 처리 기능입니다 : 내가 가지고 있기 때문에

IE9에서 예상대로이 작동
LRESULT CALLBACK myPlugin::WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) { 
     case (WM_ERASEBKGND):   
      return 1;  
    } 
    return DefWindowProc(hWindow, msg, wParam, lParam); 
} 

(나는이 일을 해요 이미지를 다시 칠하는 동안 문제가 발생 함), 클릭 메시지는 처리되지 않으며 다른 메시지도 처리되지 않습니다. 버튼이 내 플러그인과 동일한 페이지에 있으면 클릭 할 수 없습니다.

저는 IE9를 단일 프로세스로 실행하고 있습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

'SetWindowLongPtr'와'CallWindowProc'를 사용하여 문제가 해결되었지만 IE가 스스로 다시 칠하는 방식에 여전히 문제가 있습니다. –

답변

0

이전 HWND의 wndproc를 호출하지 않았습니다. 범용 적으로 DefWindowProc()을 호출하는 것이 올바르지 않습니다. HWND를 하위 클래스화할 때는 이전 wndproc의 주소를 가져와 처리하지 않은 메시지를 DefWindowProc()이 아닌 전달해야합니다.

나는 그 firebreath/ATL을하는 방법을 모르겠다.

+0

설명 주셔서 감사합니다, 나는 봤 거든 (MSDN에서) 답변을 생각해 냈어; 왜 다른 방법이 효과가 없었는지 정확히 알지 못했습니다. 나는 이것을 설명의 해답으로 표시 할 것이다. –