void CNonthreadtestDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CDialog m_dlg;
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW);}

解决方案 »

  1.   

    你这是非模态对话框,
    必须将CDialog m_dlg; 设置成类成员变量。
      

  2.   

    这是模态对话框的显示方式
    如果是非模态方式,记住,把IDD_UITHREADDLG,中的属性改为可见(默认是不可见的)visiable
      

  3.   

    CDialog m_dlg;
    void CNonthreadtestDlg::OnButton1()
    {
    // TODO: Add your control notification handler code here
    m_dlg.Create(IDD_UITHREADDLG);
    m_dlg.ShowWindow(SW_SHOW);} 
      

  4.   

    那是因为m_dlg没销毁,你又Create了
      

  5.   

    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);
    }
      

  6.   


    再点击的时候,m_dlg已经创建了,再调用m_dlg.Create(IDD_UITHREADDLG);就会报错。m_dlg有值的情况下,不能重复创建。如果想再创建,必须在m_dlg.Create(IDD_UITHREADDLG);前 加句m_dlg.DestroyWindow();
      

  7.   

    重复创建的原因 用下面的代码吧 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);
    }
      

  8.   


    你要在析构函数中 delete m_pdlg;
    另外我上面写的代码也不对, m_dlg改为m_pdlg,另外我用的是‘.’,实际上应该是‘->’