視圖類調用非模態對話時,如何銷毀分配的內存
簡要步驟:
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
王海光 閱讀(1738)
評論(0) 編輯 收藏 引用 所屬分類:
MFC