首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

窗口指针有关问题求解

2012-08-03 
窗口指针问题求解子窗口删除父窗口传进来的指针后父窗口再也打不开了,和父窗口同级的窗口也打不开了,父窗

窗口指针问题求解
子窗口删除父窗口传进来的指针后父窗口再也打不开了,和父窗口同级的窗口也打不开了,父窗口和同级的窗口的指针保存在Frame类的一个指针数组里。Frame 类中有打开父窗口的按钮。父子窗口以及和父窗口同级的窗口都是以非模态方式创建的

子窗口:
Child::Child(wxWindow* parent)
{
  m_parent = parent;
}
void Child::OnButton1Click(wxCommandEvent& event)
{
  delete m_parent;
  m_parent = 0;
  //delete this;
}
父窗口:
void Parent::OnButton1Click(wxCommandEvent& event)
{
m_child = new Child(this);
m_child->Show();
}

[解决办法]
传递的是指针啊,释放之后外边就不能使用了。
[解决办法]
void Child::OnButton1Click(wxCommandEvent& event)
{
//delete m_parent;//delete和m_parent = 0;是一样的效果,多此一句
m_parent = 0;
//delete this;//这个会删除子窗口的,实际上可能删不掉,会提示窗口正在被使用
}

经过对窗口的一些尝试,发现实际上删除m_parent后并没有删除父窗口,这个时候如果要打开父窗口,就要在打开前加一句找回父窗口的句柄,m_parent=GetParentFrame()
[解决办法]
子窗口:
Child::Child(wxWindow* parent)
{
m_parent = parent;
}
void Child::OnButton1Click(wxCommandEvent& event)
{
delete m_parent;
m_parent = 0;
//delete this;
}
这个时候删除的只是父窗口的副本,因为一个类对象最为参数传递的时候会调用拷贝构造函数,所以楼主的问题不是DELETE引起的

热点排行