覆盖OnClose()

时间:2010-06-17 11:47:27

标签: c++ events mfc

我得到了这个课程

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 个答案:

答案 0 :(得分:4)

添加ON_WM_CLOSE()后,它应该可行。你以哪种方式关闭窗口?

在你班级的头文件中,你有这条线吗? DECLARE_MESSAGE_MAP()

答案 1 :(得分: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);