面对现实,超越自己
逆水行舟,不进则退
posts - 269,comments - 32,trackbacks - 0

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

简要步骤:

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 王海光 阅读(1664) 评论(0)  编辑 收藏 引用 所属分类: MFC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理