MFC非模态对话框弹出问题

大头桢 2014-04-22 05:31:57
一:
如图,右边的框中有多少项我点击确定就会弹出多少个非模态对话框,下图红框中是代码
,现在的问题是比如现在是两项,我点击后弹出两个对话框,可是在这两个对话框没有关闭的的条件下再点击确定又弹出两个出来了,也就是一直在new,我想知道怎么记录我已经弹出的对话框指针,保证重复点击确定不会再弹出非模态对话框。
二:比如一次只弹出一个非模态对话框,

一开始判断如果指针是空的,就会创建一个并弹出,弹出后不关闭点击按钮就不会弹出,可是这样写为啥第一个都弹不出来呀?也就是指针一开始都不是空的,我在类里面定义的而且也没有在别的地方new呀?
...全文
547 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
大头桢 2014-04-26
  • 打赏
  • 举报
回复
引用 11 楼 lis2012 的回复:
[quote=引用 9 楼 a0805b0622c 的回复:] [quote=引用 6 楼 lis2012 的回复:]
vector<CDialog*>  m_VectorDlg;//这个是类成员变量  在XXX.h里面生明

	for (int i.....)//自己控制
	{
		//首先对比 m_VectorDlg中是否存在
		vector<CDialog*>::iterator itor;
		for (itor=m_VectorDlg.begin();itor!=m_VectorDlg.end();itor++)
		{
			CString  strCaption;
			itor->GetWindowText(strCaption);
			if (strCaption==_T("XXX"))
			    break;
		}
		if (itor!=m_VectorDlg.end())
		{
			//说明存在
			continue;
		}
		else
		{
			//新建对话框
			dlgyhmb=new XXXXXX;
             ......
		     m_VectorDlg.push_back(dlgyhmb);//添加到容器里面
		}
		
	}
先谢谢你思路挺好的,但是1: itor->GetWindowText(strCaption);这句报错 2:比如我弹出两个对话框,我关了一个,我希望再点击弹出后那个被我关掉的一个又会弹出,所以要是这么判断那么在关闭对话框的时候应该会要做些什么事情的,否则我关闭后就会弹不出来呀,关闭弹出的对话框该操作些什么呢[/quote] 使用(*itor)->GetWindowText(strCaption);试试[/quote] 谢谢你回答这么多,按你的思路,然后我在弹出窗口的类中析构的时候发送消息,使关闭某个对话框后对应删除vector中的指针,最后解决了问题,分都给你了 谢了哈。。。
大头桢 2014-04-24
  • 打赏
  • 举报
回复
引用 8 楼 dingxz105090 的回复:
再建议2个办法: 1.用2个变量,p1 和 p2,然后你懂的,就用你问的第二个问题的办法,new前判断是否为空。但是数目多了以后不可取 2.按一下后【确定】按钮变灰,等对话框都关了再使能【确定】按钮
谢谢你啊 但是我右边的变量个数是不定的,然后用户可能关闭了其中一个对话框还想再弹出这时候是灰的就不行啦、。。
大头桢 2014-04-24
  • 打赏
  • 举报
回复
引用 6 楼 lis2012 的回复:
vector<CDialog*>  m_VectorDlg;//这个是类成员变量  在XXX.h里面生明

for (int i.....)//自己控制
{
//首先对比 m_VectorDlg中是否存在
vector<CDialog*>::iterator itor;
for (itor=m_VectorDlg.begin();itor!=m_VectorDlg.end();itor++)
{
CString strCaption;
itor->GetWindowText(strCaption);
if (strCaption==_T("XXX"))
break;
}
if (itor!=m_VectorDlg.end())
{
//说明存在
continue;
}
else
{
//新建对话框
dlgyhmb=new XXXXXX;
......
m_VectorDlg.push_back(dlgyhmb);//添加到容器里面
}

}

先谢谢你思路挺好的,但是1: itor->GetWindowText(strCaption);这句报错
2:比如我弹出两个对话框,我关了一个,我希望再点击弹出后那个被我关掉的一个又会弹出,所以要是这么判断那么在关闭对话框的时候应该会要做些什么事情的,否则我关闭后就会弹不出来呀,关闭弹出的对话框该操作些什么呢
lis2012 2014-04-24
  • 打赏
  • 举报
回复
引用 9 楼 a0805b0622c 的回复:
[quote=引用 6 楼 lis2012 的回复:]
vector<CDialog*>  m_VectorDlg;//这个是类成员变量  在XXX.h里面生明

	for (int i.....)//自己控制
	{
		//首先对比 m_VectorDlg中是否存在
		vector<CDialog*>::iterator itor;
		for (itor=m_VectorDlg.begin();itor!=m_VectorDlg.end();itor++)
		{
			CString  strCaption;
			itor->GetWindowText(strCaption);
			if (strCaption==_T("XXX"))
			    break;
		}
		if (itor!=m_VectorDlg.end())
		{
			//说明存在
			continue;
		}
		else
		{
			//新建对话框
			dlgyhmb=new XXXXXX;
             ......
		     m_VectorDlg.push_back(dlgyhmb);//添加到容器里面
		}
		
	}
先谢谢你思路挺好的,但是1: itor->GetWindowText(strCaption);这句报错 2:比如我弹出两个对话框,我关了一个,我希望再点击弹出后那个被我关掉的一个又会弹出,所以要是这么判断那么在关闭对话框的时候应该会要做些什么事情的,否则我关闭后就会弹不出来呀,关闭弹出的对话框该操作些什么呢[/quote] 使用(*itor)->GetWindowText(strCaption);试试
凌乱哥 2014-04-23
  • 打赏
  • 举报
回复
再建议2个办法: 1.用2个变量,p1 和 p2,然后你懂的,就用你问的第二个问题的办法,new前判断是否为空。但是数目多了以后不可取 2.按一下后【确定】按钮变灰,等对话框都关了再使能【确定】按钮
不败的拿破仑 2014-04-23
  • 打赏
  • 举报
回复
放容器里 创建一个 添加进一个, 关闭一个,删除一个 判断容器是否为空
lis2012 2014-04-23
  • 打赏
  • 举报
回复
vector<CDialog*>  m_VectorDlg;//这个是类成员变量  在XXX.h里面生明

	for (int i.....)//自己控制
	{
		//首先对比 m_VectorDlg中是否存在
		vector<CDialog*>::iterator itor;
		for (itor=m_VectorDlg.begin();itor!=m_VectorDlg.end();itor++)
		{
			CString  strCaption;
			itor->GetWindowText(strCaption);
			if (strCaption==_T("XXX"))
			    break;
		}
		if (itor!=m_VectorDlg.end())
		{
			//说明存在
			continue;
		}
		else
		{
			//新建对话框
			dlgyhmb=new XXXXXX;
             ......
		     m_VectorDlg.push_back(dlgyhmb);//添加到容器里面
		}
		
	}
Eleven 2014-04-23
  • 打赏
  • 举报
回复
你把你new的东西保存到成员变量中,第二次进去的时候先判断一下
大头桢 2014-04-23
  • 打赏
  • 举报
回复
引用 2 楼 lis2012 的回复:
把new出来的对话框放到数组或者容器里面(map,list or vector),下次new的时候枚举一下容器或者数组,查看一下里面的对话框的标题是否是你要新建的对话框重复,不重复可以继续创建并放入到容器中,new出来的对象最后都需要delete的,不然会造成内存泄露哈
能不能说具体一些哈比如new出来的对话框放它的什么到容器中,指针吗?我所有的用的都是一个指针变量这样怎么用呢?最后这个指针变量指向的就是最后一个对话框是吗?新手呀麻烦了
大头桢 2014-04-22
  • 打赏
  • 举报
回复
引用 1 楼 a0805b0622c 的回复:
第二个问题已经解决了 希望谁解决一下第一个问题
哎呀 第二个问题还是没解决,我初始化指针为空了,点击弹出可以弹出非模态对话框,可是关掉该对话框后再点击弹出就没反应了,可能此时指针不是为空吧,我在弹出的非模态对话框里已经重写了oncancel()函数和PostNcDestroy()函数,该怎么弄呢?
lis2012 2014-04-22
  • 打赏
  • 举报
回复
把new出来的对话框放到数组或者容器里面(map,list or vector),下次new的时候枚举一下容器或者数组,查看一下里面的对话框的标题是否是你要新建的对话框重复,不重复可以继续创建并放入到容器中,new出来的对象最后都需要delete的,不然会造成内存泄露哈
大头桢 2014-04-22
  • 打赏
  • 举报
回复
第二个问题已经解决了 希望谁解决一下第一个问题

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧