Переопределить OnClose () - PullRequest
3 голосов
/ 17 июня 2010

Я получил этот класс

class CWebBrowser2 : public CWnd

И я хочу переопределить OnClose. Что я уже сделал, так это в заголовочном файле, я добавил void 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, но это тоже не называется.

есть идеи, что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 17 июня 2010

После добавления ON_WM_CLOSE() все должно заработать.Каким образом вы закрываете окно?

В вашем заголовочном файле вашего класса есть эта строка?DECLARE_MESSAGE_MAP()

1 голос
/ 03 сентября 2013

Хотя мой ответ опоздал на три года , я ожидаю, что другие могут оказаться здесь (как и я), пытаясь решить эту проблему. 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...