我尝试使用单例创建非模态对话框。
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 );
不能被叫两次?
答案 0 :(得分:1)
CMyDlg
最终来自CWnd
,它包含HWND
句柄。 Create()
方法来自“此实例不代表任何物理窗口,m_hWnd
是NULL
”状态为“此实例对应物理窗口,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;
}