4个回答
展开全部
关于楼主提问的“对话框怎样修改右上角的叉的响应函数”就是WM_CLOSE消息的处理函数OnClose(),fanskydream已经回答的很详细了,在此不再赘述。
我要补充的是,对话框关闭有很多途径,仅仅处理WM_CLOSE消息还是不够的。
本人就曾犯过这种错误,在对话框类中new了几个变量,在OnClose中弹出关闭确认的对话框并进行delete。当用户不点击这个“叉”关闭而直接用组合键“Alt+F4”关闭时,问题就来了:
首先是没有了关闭确认的对话框,再次就是没有delete那几个在堆上分配的变量造成内存泄漏。
因此,建议楼主重载对话框类的OnDestroy()函数。在这个函数里面进行是否关闭的确认,如果用户选择不关闭对话框,就直接返回该函数不调用父类的OnDestroy()即可。
而对话框对象内部动态生成的变量析构在放在PostNcDestroy()函数中进行。
我要补充的是,对话框关闭有很多途径,仅仅处理WM_CLOSE消息还是不够的。
本人就曾犯过这种错误,在对话框类中new了几个变量,在OnClose中弹出关闭确认的对话框并进行delete。当用户不点击这个“叉”关闭而直接用组合键“Alt+F4”关闭时,问题就来了:
首先是没有了关闭确认的对话框,再次就是没有delete那几个在堆上分配的变量造成内存泄漏。
因此,建议楼主重载对话框类的OnDestroy()函数。在这个函数里面进行是否关闭的确认,如果用户选择不关闭对话框,就直接返回该函数不调用父类的OnDestroy()即可。
而对话框对象内部动态生成的变量析构在放在PostNcDestroy()函数中进行。
展开全部
重载CDialog的OnClose(WM_CLOSE消息),在这个函数里处理就可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为你的对话框添加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();
}
加了这个函数, 在退出前 会进到这个函数里的,你想做什么都可以在这个函数中做。
也可以手动添加:(如果楼主知道消息响应函数怎么加的话就没有问题了。)
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接在回调函数中写就可以了。
LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc, // pointer to previous procedure
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(Msg)
case WM_CLOSE:
//语句块
return 0;
}
这样子就可以了。
LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc, // pointer to previous procedure
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(Msg)
case WM_CLOSE:
//语句块
return 0;
}
这样子就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询