VC++6.0中,为什么打开一个非模态对话框,旧的对话框还保留着没有删去?不断保留着旧的对话框。代码如下

voidCBnView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehe... void CBnView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call defaul
bb* pd;
pd = new bb(this);
pd->Create(IDD_DIALOG1,this);
pd->ShowWindow(SW_HIDE);
CRect dlgRect;
pd->GetWindowRect(&dlgRect);
ClientToScreen(&point);
pd->MoveWindow(point.x, point.y, dlgRect.Width(), dlgRect.Height());
pd->ShowWindow(SW_SHOW);
Invalidate();
CView::OnRButtonDown(nFlags, point);
}
展开
 我来答
paperNote
2011-06-21 · TA获得超过386个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:260万
展开全部
你可以使用集合CPtrArray来保存先前创建过的对象,然后在新创建的对象之前把这个先前已保存在集合类的对象删除和销毁窗口:
private:
CPtrArray m_ptrArray;

.......
void CBnView::OnRButtonDown(UINT nFlags, CPoint point)
{
for(int i = 0; i < m_ptrArray.GetSize();i++){
bb* ppd = (bb*)m_ptrArray.GetAt(i);//从集合类中取出bb创建过的对象
ppd->DestroyWindow();//销毁这个窗口
delete ppd;//然后把bb对象删除
m_ptrArray.RemoveAll();//清空集合类
}
bb* pd;
pd = new bb(this);
pd->Create(IDD_DIALOG1,this);
pd->ShowWindow(SW_HIDE);
CRect dlgRect;
pd->GetWindowRect(&dlgRect);
ClientToScreen(&point);
pd->MoveWindow(point.x, point.y, dlgRect.Width(), dlgRect.Height());
pd->ShowWindow(SW_SHOW);
Invalidate();
m_ptrArray.Add(pd);//把当前对象加入到集合类

CView::OnRButtonDown(nFlags, point);
}
mangri76
2011-06-21 · TA获得超过1072个赞
知道小有建树答主
回答量:649
采纳率:0%
帮助的人:0
展开全部
CXXXDlg *a;//定义要弹出的一个非模态对话框对象 a=new CXXXDlg;//分配 a-
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小强最强了啦
2011-06-21 · TA获得超过412个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:166万
展开全部
pd->ShowWindow(SW_HIDE);
这句错了,应该是:this->ShowWindow(SW_HIDE);
pd->ShowWindow(SW_SHOW);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gis19831203
2011-06-21 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:835万
展开全部
根据你的程序,你每次点击鼠标右键都会产生一个非模态对话框,以前的并不会消失。
非模态对话框需要自己写程序退出它,类似pd->DestoryWindow();所以bb* pd这句应该保留为全局的(当然也可以是CBnView的成员或其他)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
A3630623
2011-06-21 · TA获得超过180个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:42.1万
展开全部
(1)我建议你搞清下面问题:
bb* pd;
pd = new bb(this);
这个new 是深拷贝还是浅拷贝完成的。
(2)你要想删去旧的对话框,就该操作旧的对话框对象。pd->ShowWindow(SW_HIDE);这句达
不到目的。
(3)请问你想删去旧的对话框,你的相应代码是什么?在哪里?
其实删去对话框,不仅要destroywindow,还要发送WM_QUIT消息。才能真正掉除掉。否
则还会在后台继续运行。 不过在MFC中具体看这个类的封装,是否已经在这个方法中发送
了此消息
(4)想删去旧的对话框,的确设置一个全局指针变量pOldDlg或加入一类变量来保存上个对话框
,并对其进行操控是可行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缥逸仙子
2011-06-21 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:127万
展开全部
用完了要释放呀...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式