MFC 把按钮事件映射到oncancel函数 编程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按钮BN_CLICKED通知响应函数中PostMessage(WM_CLOSE);之后是会调用到CDialog::OnCancel虚函数中的。 一:按钮ID改为IDCANCEL二:按钮点击事件中,直接调用CDialog::OnCancel() 在按钮ID不是IDCANCEL的情况下应该怎样处理? 没看明白。能否把具体映射过程写一下?按钮ID不是IDCANCEL 那你把cpp文件中这个按钮点击事件的消息响应的函数名改为OnCancel呢? 就是这样:ON_BN_CLICKED(IDC_BUTTON1, OnCancel)我试了一下,是可以的 我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧? 我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧?可以 我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧?可以我在定时器中调用oncancel:void CSetTimeDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent==REMIND) //定时提醒 { KillTimer(REMIND); OnCancel(); CRemindDlg *pTD = new CRemindDlg(); pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框 pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框 //销毁非模态对话框// ((CCountProDlg*)m_pParentWnd)->m_dlgS=NULL;// // DestroyWindow(); //删除对话框 } CDialogEx::OnTimer(nIDEvent);}程序运行到void CSetTimeDlg::PostNcDestroy(){ // TODO: 在此添加专用代码和/或调用基类 CDialogEx::PostNcDestroy(); delete this;}出现死机现象: CRemindDlg *pTD = new CRemindDlg(); pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框 pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框 你这又是要干嘛你到底想干什么?调用OnCancel肯定是没有问题的你调试一下报错具体原因是什么 兄弟,搞清楚,你到底要销毁哪个对话框???你在CSetTimeDlg类的定时器直接调用OnCancel,销毁的是CSetTimeDlg,你是这么想的吗? 那你起码也得放到函数的末尾吧,否则我估计CDialogEx::OnTimer(nIDEvent);会出问题还有一个问题是:CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢? 这个报错可能是因为delete this;没有用对地方,在void CSetTimeDlg::PostNcDestroy()中使用delete this,销毁的是之前在某处new的CSetTimeDlg对象,如果没有new就在这里delete,就会报这个错。当然报这个错误的原因可能是别的。 你的 CSetTimeDlg::OnCancel()怎么写的? 谢谢你!!问题解决了,果然是“那你起码也得放到函数的末尾吧,否则我估计CDialogEx::OnTimer(nIDEvent);会出问题”,放末尾就好了。“CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢?”这个指针在CRemindDlg类的一个按钮映射的函数中释放了。 点击按钮进入另外一个对话框,且此对话框关闭,请问怎么实现? 串口编程,数据能发不能收 如何控制树节点的显示问题? vc中带变量的SQL比较语句怎么写啊?? 紧急求助!再线等待! 请问各位高手,如何改变CEdit控件的背景色?谢谢! 请问如何使对话框在启动的时候隐藏 远程关机的实现 关于MFC+OpenCV的提问 VC++中货币数据类型转换 怎样去掉停靠窗口默认的右键弹出菜单 VS2008在XP下不正常怎么解决?
二:按钮点击事件中,直接调用CDialog::OnCancel()
ON_BN_CLICKED(IDC_BUTTON1, OnCancel)
我试了一下,是可以的
我在定时器中调用oncancel:
void CSetTimeDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent==REMIND) //定时提醒
{
KillTimer(REMIND);
OnCancel();
CRemindDlg *pTD = new CRemindDlg();
pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框
pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框 //销毁非模态对话框
// ((CCountProDlg*)m_pParentWnd)->m_dlgS=NULL;
//
// DestroyWindow(); //删除对话框
} CDialogEx::OnTimer(nIDEvent);
}
程序运行到
void CSetTimeDlg::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
CDialogEx::PostNcDestroy();
delete this;
}
出现死机现象:
pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框
pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框 你这又是要干嘛
你到底想干什么?
调用OnCancel肯定是没有问题的
你调试一下报错具体原因是什么
你在CSetTimeDlg类的定时器直接调用OnCancel,销毁的是CSetTimeDlg,你是这么想的吗?
还有一个问题是:CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢?
“CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢?”这个指针在CRemindDlg类的一个按钮映射的函数中释放了。