2010-06-17 68 views
3

我得到這個類覆蓋的OnClose()

class CWebBrowser2 : public CWnd 

,我想重寫的OnClose我迄今所做的是在我加入無效的OnClose頭文件();並在我添加的.cpp文件中

void CWebBrowser2::OnClose() 
{ 
     int i=0; 
     i++; 
} 

但是OnClose永遠不會被調用。

然後我試圖以頭文件修改到

afx_msg void OnClose(); 
DECLARE_MESSAGE_MAP() 

,並將此向.cpp文件

BEGIN_MESSAGE_MAP(CWebBrowser2, CWnd) 
    //{{AFX_MSG_MAP(CBrowserDlg) 
    ON_WM_CLOSE() 
    //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 

但還是OnClose中永遠不會被調用。我試圖改變OnClose到OnDestroy,但也沒有調用。

什麼我做錯了什麼想法?

回答

4

添加ON_WM_CLOSE()後,它應該工作。你以哪種方式關閉窗戶?

在你的班級的頭文件中,你有這條線嗎? DECLARE_MESSAGE_MAP()

1

雖然我的回答是三個很晚,但我希望其他人可能最終會在這裏(像我一樣)試圖解決這個問題。 OP確實編寫了正確的消息處理,但是當您動態創建ActiveX控件時(正如通常在使用CWebBrowser2時所做的那樣),您需要繼承與控件關聯的HWND。你可以在http://support.microsoft.com/kb/156051閱讀。

// This is how the control is normally created (i.e., dynamically): 

/* CWebBrowser2 * */ pBrowser = new CWebBrowser2; 
CWebBrowser2 * pBrowser = new CWebBrowser2; 
ASSERT(pBrowser); 

if (!pBrowser->Create(_T("windowname"), _T("classname"), WS_VISIBLE, CRect(0,0,0,0), this, ID_OF_BROWSER)) 
{ 
    TRACE(_T("An error occurred creating the Map tab"), true, false); 
    delete pBrowser; 
    pBrowser = NULL; 
    return 0; 
} 

// Add these two lines so your control receives Windows messages: 
HWND hWnd = pBrowser->Detach(); 
pBrowser->SubclassWindow(hWnd);