MFC 子对话框与父视图传递自定义消息

MFC 子对话框与父视图传递自定义消息

视图类调用非模态对话时,如何销毁分配的内存

简要步骤:

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;
}

你可能感兴趣的:(MFC 子对话框与父视图传递自定义消息)