2012-07-31 18 views
0

我正在開發使用Firebreath一個沒有窗戶的插件,我要趕作進一步處理特定的消息,我能夠做到這一點,但這樣的消息的其餘「丟失「 我認爲。互聯網Explorer_Server(IE9)處理窗口消息

我有這樣的代碼掛鉤的消息循環:

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; 
} 

這是處理功能:

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預期(我這樣做是因爲我有在重新繪製圖像時出現一些問題),但是點擊消息沒有被處理,也沒有任何其他消息;所以如果一個按鈕與我的插件在同一頁面中,它將不會被點擊。

我將IE9作爲一個進程運行。

任何幫助表示讚賞。

謝謝!

+0

使用'SetWindowLongPtr'和'CallWindowProc'解決了這個問題,但仍然有IE瀏覽器,重新繪製本身的方式解決問題。 – 2012-07-31 18:08:06

回答

0

你不打電話給以前的HWND的wndproc。通用調用DefWindowProc()是不正確的。當你爲一個HWND子類時,你需要得到舊的wndproc的地址,並傳遞你不處理的消息,而不是DefWindowProc()。

我不知道如何做firebreath/ATL。

+0

感謝您的解釋,我搜索了一個答案(來自MSDN);但不知道爲什麼其他方式不起作用。由於解釋的原因,我會將其標記爲答案。 – 2012-08-01 13:45:56