重复创建绑定父窗口

来源:互联网 发布:怎么设计淘宝首页 编辑:程序博客网 时间:2024/05/16 23:51
关于重复创建失败的问题总结:
   问题描述:我们创建窗口调用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);
    
}
原创粉丝点击