MFC中通過子視窗關閉父視窗以實現退出程式

2021-07-04 08:51:32 字數 2634 閱讀 5796

這應該是個老問題,我來稍微總結下:(我剛剛接觸windows程式設計希望大家多多指點)

1.上來來個最魯莽的.

直接通過exit(0),exitprocess(0);//不好的用法

猜測資源得不到**

原因如下:

2.

向父視窗傳送wm_close訊息,然後自己關閉自己的視窗。

獲取將父視窗的控制代碼直接傳給子視窗,然後子視窗可以直接關閉父視窗.

示例**如下:

父視窗類的定義:

// cmfc_biometic_authenticationdlg 對話方塊

class cmfc_biometic_authenticationdlg : public cdialogex

; 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

;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()

3.另有網友建議做法,

子視窗關閉通知父視窗

子視窗 public partial class formsub form public delegate void updatedatadelegate 宣告乙個委託 public updatedatadelegate updatetextbox 定義委託 public formsub initi...

swing 子視窗關閉時重新整理父視窗

基本原理是這樣的 1 在父類中定義乙個重新整理父視窗內容的方法 2 在父視窗中開啟子視窗時,將父視窗的例項也傳給子視窗 3 子類中建立乙個父類例項的屬性,在子類在構造方法中用此屬性接受傳過來的父類例項 4 子視窗關閉時,呼叫父類中的方法,實現對父視窗內容的重新整理。說明 本方法不包括從子視窗向父視窗...

WPF 關閉子視窗時重新整理父視窗

關閉子視窗後子視窗進行某個操作後重新整理父視窗 父視窗 彈出視窗 private void mifuncset click object sender,routedeventargs e 設定視窗關閉時執行的方法 void funcsettingclosed 子視窗 定義委託 public dele...