在线等答案

hgy605 2010-07-02 10:57:51
在Dlg上放了一个按钮B,点击B后弹出Dlg1,在Dlg1上有个按钮B1,点击B1后销毁Dlg1,这是问题的简单说明,
不能在B中的事件中直接用CDlg1 m_Dlg1;这样为局部变量,因为涉及m_Dlg1指针在其他地方调用问题,
我现在是在Dlg中声明了成员变量CDlg1 m_Dlg1,在按钮B中,加上了
m_Dlg1.Create(CDlg1::IDD)
m_Dlg1.ShowWindow(SW_SHOW);
....
在B1中加上了PostMessage(WM_SYSCOMMAND,SC_CLOSE,0);
发现B1并没有把m_Dlg1销毁掉,用DestoryWindow()也不行,
问:
如何让B1正确把自身的窗口销毁,再次按B时,再次生成新的m_Dlg1

...全文
157 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
许文君 2010-07-03
  • 打赏
  • 举报
回复
delete
babala2009 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tttyd 的回复:]

Dlg1 ->B1
消息响应
ShowWindow(this->m_hWnd,SW_HIDE);
[/Quote]

up
雪影 2010-07-02
  • 打赏
  • 举报
回复
Dlg1 ->B1
消息响应
ShowWindow(this->m_hWnd,SW_HIDE);
雪影 2010-07-02
  • 打赏
  • 举报
回复
如果下次还需要使用
直接ShowWindow既可以了。
在Dlg对话框的B按钮消息响应函数中,判断一下Dlg1对话框是否已经创建,如果已经创建的话,只需ShowWindow既可以了

if(!IsWindow(Dlg.m_hWnd))
{
m_Dlg1.Create(CDlg1::IDD)
....
}
m_Dlg1.ShowWindow(SW_SHOW);
hgy605 2010-07-02
  • 打赏
  • 举报
回复
晕,不是模态对话框,m_Dlg1.Create(CDlg1::IDD)
kemee 2010-07-02
  • 打赏
  • 举报
回复
点按钮B的时候FindWindow判断是否还存在Dlg1,还存在就先销毁
hongya6088 2010-07-02
  • 打赏
  • 举报
回复
EndDialog关闭模态对话框
liyinlei 2010-07-02
  • 打赏
  • 举报
回复
模式对话框用EndDialog来关闭
雪影 2010-07-02
  • 打赏
  • 举报
回复
在B1按钮的消息响应函数中使用EndDialog关闭Dlg1对话框
hgy605 2010-07-02
  • 打赏
  • 举报
回复
IDOK被我屏蔽掉了,
zxdlms 2010-07-02
  • 打赏
  • 举报
回复
这里也回答一下。

用DestroyWindow()是可以销毁对话框的啊,我这么用过的。
山伟 2010-07-02
  • 打赏
  • 举报
回复
我说的方法你试了吗?
hgy605 2010-07-02
  • 打赏
  • 举报
回复
动态分配的确可以,但为什么直接分配就不可以呢,
Sky-Yang 2010-07-02
  • 打赏
  • 举报
回复
OnCancel( ) - -|||
山伟 2010-07-02
  • 打赏
  • 举报
回复
销毁一个窗口只要做DestroyWindow和delete就可以了。
山伟 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hgy605 的回复:]
晕,我尝试改成指针,m_pDlg1,m_pDlg2,在B中加入m_pDlg1=new CDlg1,m_pDlg1->ShowWindow(SW_Show);到这一步直接挂掉,现在问题点就是Dlg1上的按钮B1怎么把Dlg1彻底销毁,
[/Quote]

挂掉是因为你new完后没有create.。另外这里的成员对象最好声明为指针
Dlg *m_pDlg1 = NULL;
m_pDlg1 = new Dlg();
m_pDlg1->Create();
m_pDlg1->showWindow();

当你点B1的时候可以在B1的OnBt函数里调用DestoryWindow();
然后在你下一次点击B的时候在new之前先判断m_pDlg1是否为空,如果不为空就销毁窗口delete指针及对指针赋空。然后再new和Create
zhu6789888 2010-07-02
  • 打赏
  • 举报
回复
m_Dlg1.PostMessage(WM_CLOSE, 0, 0); 可以不 ?
hgy605 2010-07-02
  • 打赏
  • 举报
回复
晕,我尝试改成指针,m_pDlg1,m_pDlg2,在B中加入m_pDlg1=new CDlg1,m_pDlg1->ShowWindow(SW_Show);到这一步直接挂掉,现在问题点就是Dlg1上的按钮B1怎么把Dlg1彻底销毁,
hgy605 2010-07-02
  • 打赏
  • 举报
回复
那比如那个按钮B是个“新建”按钮,我点了B后会生成Dlg1,在Dlg1上放了一些比如EDIT控件,在里面输入文字,那我下次点新建,要是只是隐藏,那么那些文字还会存在,这还是新建的对话框吗
Eleven 2010-07-02
  • 打赏
  • 举报
回复
你调用ShowWindow来显示和隐藏不是更好吗?
加载更多回复(1)

16,473

社区成员

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

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

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