2 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
關(guān)于提問(wèn)的“對(duì)話框怎樣修改右上角的叉的響應(yīng)函數(shù)”就是WM_CLOSE消息的處理函數(shù)OnClose(),fanskydream已經(jīng)回答的很詳細(xì)了,在此不再贅述。
我要補(bǔ)充的是,對(duì)話框關(guān)閉有很多途徑,僅僅處理WM_CLOSE消息還是不夠的。
本人就曾犯過(guò)這種錯(cuò)誤,在對(duì)話框類中new了幾個(gè)變量,在OnClose中彈出關(guān)閉確認(rèn)的對(duì)話框并進(jìn)行delete。當(dāng)用戶不點(diǎn)擊這個(gè)“叉”關(guān)閉而直接用組合鍵“Alt+F4”關(guān)閉時(shí),問(wèn)題就來(lái)了:
首先是沒(méi)有了關(guān)閉確認(rèn)的對(duì)話框,再次就是沒(méi)有delete那幾個(gè)在堆上分配的變量造成內(nèi)存泄漏。
因此,建議樓主重載對(duì)話框類的OnDestroy()函數(shù)。在這個(gè)函數(shù)里面進(jìn)行是否關(guān)閉的確認(rèn),如果用戶選擇不關(guān)閉對(duì)話框,就直接返回該函數(shù)不調(diào)用父類的OnDestroy()即可。
而對(duì)話框?qū)ο髢?nèi)部動(dòng)態(tài)生成的變量析構(gòu)在放在PostNcDestroy()函數(shù)中進(jìn)行。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
為你的對(duì)話框添加WM_CLOSE的消息處理函數(shù)
加了這個(gè)函數(shù), 在退出前 會(huì)進(jìn)到這個(gè)函數(shù)里的,你想做什么都可以在這個(gè)函數(shù)中做。
也可以手動(dòng)添加:(如果樓主知道消息響應(yīng)函數(shù)怎么加的話就沒(méi)有問(wèn)題了。)
1。頭文件
afx_msg void OnClose();
2.
BEGIN_MESSAGE_MAP(CBaiduDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_CLOSE()///這個(gè)地方一定要寫(xiě)
END_MESSAGE_MAP()
3.
void CBaiduDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
}
添加回答
舉報(bào)