对话框按ESC退出的消息问题

meuveran 2009-10-29 07:09:10
例如对话框叫Test
我在
TestDlg.h里声明了一个类对象指针 CMyTest *m_pTest;

在TestDlg.CPP里new 了一个对象
在TestDlg.cpp里我自己写了个退出消息,点按钮,delete 对象,指针=NULL,然后PostMessage(WM_QUIT,0,0);
这样点按钮来退出的话一切正常

如果运行后按ESC,就会造成内存泄漏。
我断点了一下,按ESC会触发Test.CPP里InitInstance()这个函数的return FALSE,但m_pTest是TestDlg.h里声明的
Test.cpp里调用不到。

请问应该怎样做,只能把对象指针声明为全局?
...全文
249 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
skywoodsky 2009-10-30
  • 打赏
  • 举报
回复
ESC调用的是对话框的oncancel,重载它
ccdeath 2009-10-30
  • 打赏
  • 举报
回复
TestDlg.h中:extern CMyTest *m_pTest; TestDlg.h
TestDlg.cpp中:CMyTest *m_pTest;
Test.cpp包含头文件TestDlg.h


楼主请给分吧。。。。
奉海 2009-10-30
  • 打赏
  • 举报
回复
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message ==WM_KEYDOWN)
{
if( (pMsg->wParam==VK_ESCAPE) )
{
// 此处捕获在对话框上按下ESC键,可在此处释放你new出来的指针
if ( NULL != m_pTest )
{
delete m_pTest;
m_pTest = NULL;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
hongya6088 2009-10-30
  • 打赏
  • 举报
回复
通常是屏蔽ESC和Enter键,不然总感觉有很多不确定性。
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
return TRUE;
case VK_ESCAPE:
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
maple_zhj 2009-10-30
  • 打赏
  • 举报
回复
在pretranslatemessage 里,直接处理掉 ESC 键位,
就不会有问题了。
pady_pady 2009-10-29
  • 打赏
  • 举报
回复
重写OnCancel()
WooSir 2009-10-29
  • 打赏
  • 举报
回复
ESC调用了OnClose,重载它,在它里面销毁指针
muzizongheng 2009-10-29
  • 打赏
  • 举报
回复
很简单, 第一选择, 屏蔽掉esc, 也就是说你响应IDCANCEL的id, 然后注释掉OnCancel();

第二选择, 就是把你点击按钮 退出的 处理放到 PostNcDestroy(), 改为调用OnCancel();
hufen2740 2009-10-29
  • 打赏
  • 举报
回复
TestDlg.h中:extern CMyTest *m_pTest; TestDlg.h
TestDlg.cpp中:CMyTest *m_pTest;
Test.cpp包含头文件TestDlg.h
starytx 2009-10-29
  • 打赏
  • 举报
回复
可以在对话框的PreTranslateMessage()中截获ESC按键消息,然后在其中调用你那个按钮动作
wocow3 2009-10-29
  • 打赏
  • 举报
回复
.h中:extern CMyTest *m_pTest;
.cpp中:CMyTest *m_pTest;
一条晚起的虫 2009-10-29
  • 打赏
  • 举报
回复
// extern

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧