为什么点击按钮后,不显示非模态对话框??

lanpishu1984 2009-08-21 03:10:30
void CNonthreadtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog m_dlg;
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW);

}
...全文
174 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪影 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lanpishu1984 的回复:]
引用 8 楼 tttyd 的回复:
CDialog* m_pdlg;
在构造函数中初始化 m_pdlg = NULL;
C/C++ codevoid CNonthreadtestDlg::OnButton1()
{// TODO: Add your control notification handler code hereif(m_pdlg==NULL)
    m_dlg.Create(IDD_UITHREADDLG);
ASSERT(m_pdlg!= NULL);
m_dlg.ShowWindow(SW_SHOW);
}


内存泄露!!
[/Quote]

你要在析构函数中 delete m_pdlg;
另外我上面写的代码也不对, m_dlg改为m_pdlg,另外我用的是‘.’,实际上应该是‘->’
lanpishu1984 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tttyd 的回复:]
CDialog* m_pdlg;
在构造函数中初始化 m_pdlg = NULL;
C/C++ codevoid CNonthreadtestDlg::OnButton1()
{// TODO: Add your control notification handler code hereif(m_pdlg==NULL)
m_dlg.Create(IDD_UITHREADDLG);
ASSERT(m_pdlg!= NULL);
m_dlg.ShowWindow(SW_SHOW);
}

[/Quote]
内存泄露!!
yuhudie203 2009-08-21
  • 打赏
  • 举报
回复
重复创建的原因 用下面的代码吧

if (m_pLogConfigDlg != NULL)
{
m_pLogConfigDlg->SetFocus();
m_pLogConfigDlg->ShowWindow(SW_NORMAL);
}
else
{

m_pLogConfigDlg = new CLogViewConfigDlg();
//IDD_DIALOG_LOGVIEWCONFIG
m_pLogConfigDlg->Create(IDD_DIALOG_LOGVIEWCONFIG);

CRect rectClient;
CRect rectDlg;

this->GetClientRect(&rectClient);
m_pLogConfigDlg->GetWindowRect(&rectDlg);

int xOff = (rectClient.Width()-rectDlg.Width())/2;
int yOff = (rectClient.Height()-rectDlg.Height())/2;
rectDlg.OffsetRect(xOff, yOff);

m_pLogConfigDlg->MoveWindow(&rectDlg);

m_pLogConfigDlg->ShowWindow(SW_SHOW);
}
雪影 2009-08-21
  • 打赏
  • 举报
回复
注意你不能关闭窗口,否则一样出现错误
可以隐藏
xylicon 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lanpishu1984 的回复:]
引用楼主 lanpishu1984 的回复:
void CNonthreadtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog m_dlg;
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW);

}

谢谢,解决了。还想问下,为什么我再点击就出错??
[/Quote]

再点击的时候,m_dlg已经创建了,再调用m_dlg.Create(IDD_UITHREADDLG);就会报错。m_dlg有值的情况下,不能重复创建。

如果想再创建,必须在m_dlg.Create(IDD_UITHREADDLG);前 加句m_dlg.DestroyWindow();
雪影 2009-08-21
  • 打赏
  • 举报
回复
CDialog* m_pdlg;
在构造函数中初始化 m_pdlg = NULL;
void CNonthreadtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
if(m_pdlg==NULL)
m_dlg.Create(IDD_UITHREADDLG);
ASSERT(m_pdlg != NULL);
m_dlg.ShowWindow(SW_SHOW);
}

lanpishu1984 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 feilinhe 的回复:]
那是因为m_dlg没销毁,你又Create了
[/Quote]
谢谢,怎么销毁呢?模态的就不需要!
feilinhe 2009-08-21
  • 打赏
  • 举报
回复
那是因为m_dlg没销毁,你又Create了
lanpishu1984 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 flyskytoday 的回复:]
这是模态对话框的显示方式
如果是非模态方式,记住,把IDD_UITHREADDLG,中的属性改为可见(默认是不可见的)visiable
[/Quote]
谢谢,解决了。还想问下,为什么我再点击就出错??
lanpishu1984 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 lanpishu1984 的回复:]
void CNonthreadtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog m_dlg;
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW);

}

[/Quote]谢谢,解决了。还想问下,为什么我再点击就出错??
skynfly 2009-08-21
  • 打赏
  • 举报
回复
CDialog m_dlg;
void CNonthreadtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW);

}
flyskytoday 2009-08-21
  • 打赏
  • 举报
回复
这是模态对话框的显示方式
如果是非模态方式,记住,把IDD_UITHREADDLG,中的属性改为可见(默认是不可见的)visiable
雪影 2009-08-21
  • 打赏
  • 举报
回复
你这是非模态对话框,
必须将CDialog m_dlg; 设置成类成员变量。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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