2010-06-17 3 views
3

Я получил этот классOverride OnClose()

class CWebBrowser2 : public CWnd 

И я хочу, чтобы переопределить OnClose Что я сделал до сих пор находится в файле заголовка я добавил недействительным OnClose(); и в .cpp-файле i добавлено

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