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);
} 展开
{
// 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);
} 展开
6个回答
展开全部
你可以使用集合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);
}
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);
}
展开全部
CXXXDlg *a;//定义要弹出的一个非模态对话框对象 a=new CXXXDlg;//分配 a-
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
pd->ShowWindow(SW_HIDE);
这句错了,应该是:this->ShowWindow(SW_HIDE);
pd->ShowWindow(SW_SHOW);
这句错了,应该是:this->ShowWindow(SW_HIDE);
pd->ShowWindow(SW_SHOW);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据你的程序,你每次点击鼠标右键都会产生一个非模态对话框,以前的并不会消失。
非模态对话框需要自己写程序退出它,类似pd->DestoryWindow();所以bb* pd这句应该保留为全局的(当然也可以是CBnView的成员或其他)。
非模态对话框需要自己写程序退出它,类似pd->DestoryWindow();所以bb* pd这句应该保留为全局的(当然也可以是CBnView的成员或其他)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)我建议你搞清下面问题:
bb* pd;
pd = new bb(this);
这个new 是深拷贝还是浅拷贝完成的。
(2)你要想删去旧的对话框,就该操作旧的对话框对象。pd->ShowWindow(SW_HIDE);这句达
不到目的。
(3)请问你想删去旧的对话框,你的相应代码是什么?在哪里?
其实删去对话框,不仅要destroywindow,还要发送WM_QUIT消息。才能真正掉除掉。否
则还会在后台继续运行。 不过在MFC中具体看这个类的封装,是否已经在这个方法中发送
了此消息
(4)想删去旧的对话框,的确设置一个全局指针变量pOldDlg或加入一类变量来保存上个对话框
,并对其进行操控是可行的。
bb* pd;
pd = new bb(this);
这个new 是深拷贝还是浅拷贝完成的。
(2)你要想删去旧的对话框,就该操作旧的对话框对象。pd->ShowWindow(SW_HIDE);这句达
不到目的。
(3)请问你想删去旧的对话框,你的相应代码是什么?在哪里?
其实删去对话框,不仅要destroywindow,还要发送WM_QUIT消息。才能真正掉除掉。否
则还会在后台继续运行。 不过在MFC中具体看这个类的封装,是否已经在这个方法中发送
了此消息
(4)想删去旧的对话框,的确设置一个全局指针变量pOldDlg或加入一类变量来保存上个对话框
,并对其进行操控是可行的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用完了要释放呀...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询