重复创建绑定父窗口

关于重复创建失败的问题总结:
   问题描述:我们创建窗口调用Create(IDD,this);理论上值创建一次就可以了,
但是在某些情况下(比如:需要加载不同的文件来显示在窗口上),这样我们就可能
要重复绑定父窗口,再次调用Create();但是我们知道一定会出错(不能重复绑定),
我们首先想到的就是加上if(m_hWnd)判断是否已经创建绑定好窗口了,第一次没
创建就和平时一样调用Create(IDD,thisParent);如果已经创建绑定就调用DestoryWindow();
然后再创建,调用Create(IDD,thisParent);但是我们发现还是会出错,出现这个问题一般
都是因为我们的窗口对象不是一个指针对象,而是普通类对象,普通窗口对象调用
DestoryWindow();只是消除对象而不会把对象的内部数据置为NULL(窗口类对象初始化时
比如顶层窗口是默认的,但是在赋默认时会有断言判断ASSERT(NULL == m_Menu).....)
因为我们的对象里面的成员指针都赋过值,所有就会引发类似的一系列断言,解决方法就是
把类对象换成类对象指针,初始化时用new创建好指针对象,之后在判断
重复点击时DestroyWindow();后面delete thisWnd;然后thisWnd = NULL ,然后再重新New
一个对象就可以了,记得在析构里也要if( NULL != thisWnd ){delete thisWnd;thisWnd = NULL}
详细代码如下:
     
void CUCConvertDataApp::UserSetParent(CWnd * pm_pwndParent)//设置设置界面的父窗口,并创建对像,不显示
{
if ( v_DlgConvertDataSetting->m_hWnd )
{
v_DlgConvertDataSetting->DestroyWindow();
delete v_DlgConvertDataSetting;
v_DlgConvertDataSetting = NULL;
v_DlgConvertDataSetting= new UCDlgConvertDataSetting;
v_DlgConvertDataSetting->Create( UCDlgConvertDataSetting::IDD,pm_pwndParent);
}
else
v_DlgConvertDataSetting->Create( UCDlgConvertDataSetting::IDD,pm_pwndParent);
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值