2 回答

TA貢獻2080條經驗 獲得超4個贊
關于提問的“對話框怎樣修改右上角的叉的響應函數”就是WM_CLOSE消息的處理函數OnClose(),fanskydream已經回答的很詳細了,在此不再贅述。
我要補充的是,對話框關閉有很多途徑,僅僅處理WM_CLOSE消息還是不夠的。
本人就曾犯過這種錯誤,在對話框類中new了幾個變量,在OnClose中彈出關閉確認的對話框并進行delete。當用戶不點擊這個“叉”關閉而直接用組合鍵“Alt+F4”關閉時,問題就來了:
首先是沒有了關閉確認的對話框,再次就是沒有delete那幾個在堆上分配的變量造成內存泄漏。
因此,建議樓主重載對話框類的OnDestroy()函數。在這個函數里面進行是否關閉的確認,如果用戶選擇不關閉對話框,就直接返回該函數不調用父類的OnDestroy()即可。
而對話框對象內部動態生成的變量析構在放在PostNcDestroy()函數中進行。

TA貢獻1829條經驗 獲得超13個贊
為你的對話框添加WM_CLOSE的消息處理函數
加了這個函數, 在退出前 會進到這個函數里的,你想做什么都可以在這個函數中做。
也可以手動添加:(如果樓主知道消息響應函數怎么加的話就沒有問題了。)
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()///這個地方一定要寫
END_MESSAGE_MAP()
3.
void CBaiduDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
}
添加回答
舉報