这应该是个老问题,我来稍微总结下:(我刚刚接触Windows编程希望大家多多指点)
1.上来来个最鲁莽的.
直接通过exit(0),ExitProcess(0);//不好的用法
猜测资源得不到回收
原因如下:
http://blog.csdn.net/jiang1013nan/article/details/4831020
2.向父窗口发送WM_CLOSE消息,然后自己关闭自己的窗口。
获取将父窗口的句柄直接传给子窗口,然后子窗口可以直接关闭父窗口.
示例代码如下:
父窗口类的定义:
// CMFC_biometic_authenticationDlg 对话框class CMFC_biometic_authenticationDlg : public CDialogEx{// 构造public: CMFC_biometic_authenticationDlg(CWnd* pParent = NULL); // 标准构造函数// 对话框数据 enum { IDD = IDD_MFC_BIOMETIC_AUTHENTICATION_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedOk(); afx_msg void OnStnClickedPasswordTipsStatic(); afx_msg void OnStnClickedUsernameStatic(); afx_msg void OnEnChangeEdit3(); afx_msg void OnEnChangeFingerTipsEdit();private: CString m_username;private: CString m_password;private: CString m_message_return;public: afx_msg void OnBnClickedOkButton(); afx_msg void OnStnClickedPassMessageStatic(); afx_msg void OnBnClickedInstructionLog();private: CUserDialog m_Userlog;public: afx_msg void OnClose();};
子窗口类的定义
class CUserDialog : public CDialogEx{ DECLARE_DYNAMIC(CUserDialog)public: CUserDialog(CWnd* pParent = NULL); // 标准构造函数 virtual ~CUserDialog();// 对话框数据 enum { IDD = IDD_USER_DIALOG };protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedUserExitButton(); afx_msg void OnBnClickedOk(); afx_msg void OnClose();private: CWnd *m_pParentWnd;};
CWnd *m_pParentWnd; 子窗口类中用来存储父窗口的指针
CUserDialog::CUserDialog(CWnd* pParent /*=NULL*/) : CDialogEx(CUserDialog::IDD, pParent), m_pParentWnd(pParent){ }
关闭的过程通过 ::SendMessage(...);
void CUserDialog::OnClose(){ // TODO: 在此添加消息处理程序代码和/或调用默认值 //ExitProcess(0); //不好的用法 //::DestroyWindow(m_pParentWnd); ::SendMessage(m_pParentWnd->m_hWnd, WM_CLOSE, 0, 0); CDialogEx::OnClose();}
3.另有网友建议做法,用一个全局变量表示是否要退出程序,在子窗口中赋值,当子窗口被调用后,父窗口在调用处判定是否要退出程序。(没试过,欢迎做过的朋友留言,贴出重要代码或私信我)非常感谢~~
版权声明:本文为博主原创文章,未经博主允许不得转载。