我得到了这个课程
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,但也没有调用。
关于我做错什么的任何想法?
答案 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);