使用单例创建对话框

时间:2013-09-05 11:07:55

标签: c++ visual-c++ user-interface mfc

我尝试使用单例创建非模态对话框。

CMyDlg& CMyDlg::GetInstance()
{
    static CMyDlg myDlg;
    return myDlg;
}

然后在某个按钮按下我调用Create

CMyMain::OnSomeButtonPress()
{
    CMyDlg::GetInstance().Create( CMyDlg::IDD );
}

但问题是,当我尝试调用Create两次失败时(wincore.cpp第638行)

我做错了什么以及为什么

CMyDlg::GetInstance().Create( CMyDlg::IDD );

不能被叫两次?

2 个答案:

答案 0 :(得分:1)

CMyDlg最终来自CWnd,它包含HWND句柄。 Create()方法来自“此实例不代表任何物理窗口,m_hWndNULL”状态为“此实例对应物理窗口,m_hWnd是句柄到那个窗口“状态。当然,Create()首先断言m_hWnd确实是NULL

如果您希望同时在屏幕上显示两个对话框,则需要两个CMyDlg个实例来表示它们;你不能使用单身人士。如果您不想要两个对话框,那么为什么又要两次调用Create()

答案 1 :(得分:0)

最后我只使用指向对话框的指针。

CMyDlg* m_pDlg= NULL;
CMyDlg* CMyDlg::GetInstance()
{
    m_pDlg= new CMyDlg;
    m_pDlg->Create(CMyDlg::IDD);
    return m_pDlg;
}

void CMain::OnSomeButtonPress()
{
    CMyDlg::GetInstance();
}


void CMyDlg::OnBnClickedCancel()
{
    if(m_pDlg!= NULL)
        delete m_pDlg;
}