重复创建绑定父窗口
来源:互联网 发布:怎么设计淘宝首页 编辑:程序博客网 时间: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);
}
问题描述:我们创建窗口调用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);
}
- 重复创建绑定父窗口
- javascript基础:创建窗口、父窗口与子窗口
- jQuery重复绑定事件
- 提示重复绑定DropDownList
- JQuery事件重复绑定
- 关于js重复绑定
- 创建窗口
- 创建窗口
- 创建窗口
- 创建窗口
- 创建窗口
- 创建窗口
- 创建窗口
- 创建窗口
- 如何解决Visual Studio2015无法创建C++控制台应用程序,重复弹出新建项目窗口的问题
- 创建父窗口和子窗口,子窗口在父窗口里
- jquery事件重复绑定解决办法
- SQLiteProgram bool类型重复绑定
- glOrtho
- 关于ARM嵌入式工程师认证,AAE
- 如何快速打开Unity商店下载中文插件?
- OpenRisc-21-添加自己的slave IP core到ORSoC并测试
- Linux内核进程详解之三:flush-x:y
- 重复创建绑定父窗口
- Flex <mx:DataGrid>在一个记录中支持换行显示
- POJ 3003 Spiderman’s workout
- Ubuntu常用命令大全
- 如何在Eclipse下查看JDK源代码
- [iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求。HTTP 错误 404.11 - Not Found
- Teradata各种类型Show 语句
- 【OpenStack】Nova中的create_image
- MyEclipse构建SSH框架简介