导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

在线等答案

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

...全文
104 点赞 收藏 21
写回复
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来显示和隐藏不是更好吗?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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