视图类调用非模态对话时,如何销毁分配的内存
简要步骤:
1、视图类在调用非模态对话框时,将自身的指针传递给非模态对话框。
2、当非模态对话框结束时,向视图类发送自定义消息,由自定义消息处理函数来释放内存。
具体代码步骤:
1、定义自定义消息 #define WM_RELEASEPLAYSOUNDDC (WM_USER+1001)
2、修改非模态对话框类的构造函数,便于将视图指针传递进去。
非模态对话框.h文件中
class CTestDialog : public CDialog
{
DECLARE_DYNAMIC(CPlaySound)
public:
//CTestDialog (CWnd* pParent = NULL); // standard constructor
CTestDialog (CView* pParent); // standard constructor
virtual ~CTestDialog ();
CView *pView;
// Dialog Data
enum { IDD = IDD_TEST_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg LRESULT OnNcHitTest(CPoint point);
};
非模态对话框.cpp文件中IMPLEMENT_DYNAMIC(CTestDialog, CDialog)
//CTestDialog::CTestDialog(CWnd* pParent /*=NULL*/)
CTestDialog::CTestDialog(CView* pParent)
: CDialog(CTestDialog::IDD, pParent)
{
pView = pParent;
}
3、在非模态对话框结束的时候发送自定义消息void CTestDialog::OnBnClickedBtnClose()
{
// TODO: Add your control notification handler code here
pView->PostMessage(WM_RELEASEPLAYSOUNDDC, 0, 0);
OnOK();
}
4、在视图类.h文件中,增加定义:
afx_msg LRESULT OnReleaseDialog(WPARAM wparam,LPARAM lparam);
5、在视图类.cpp文件中,增加消息映射部分:
ON_MESSAGE(WM_DIALOGOK,OnDialogOk)
6、在视图类.cpp文件中定义消息处理函数的实现:
LRESULT CTestView::OnReleaseDialog(WPARAM wparam,LPARAM lparam)
{
if (m_pPlaySound != NULL)
{
delete m_pPlaySound;
m_pPlaySound = NULL;
}
return 0;
}
posted on 2014-03-07 15:01
王海光 阅读(1709)
评论(0) 编辑 收藏 引用 所属分类:
MFC