使用singleton创建对话框
Dialog create using singleton
我正在尝试使用singleton创建非模态对话框。
CMyDlg& CMyDlg::GetInstance()
{
static CMyDlg myDlg;
return myDlg;
}
然后按下某个按钮,我调用创建
CMyMain::OnSomeButtonPress()
{
CMyDlg::GetInstance().Create( CMyDlg::IDD );
}
但问题是,当我尝试调用Create两次时,它失败了(wincore.cpp第638行中的内容)
我做错了什么,为什么
CMyDlg::GetInstance().Create( CMyDlg::IDD );
不能叫两次吗?
CMyDlg
最终派生自CWnd
,后者封装了一个HWND
句柄。Create()
方法从"此实例不代表任何物理窗口,m_hWnd
是NULL
"状态变为"此实例对应于一个物理窗口,而m_hWnd
是该窗口的句柄"状态。自然地,Create()
首先断言m_hWnd
实际上是NULL
。
如果你想让两个对话框同时出现在屏幕上,那么你需要两个CMyDlg
实例来表示它们;你不能使用singleton。如果你不想要两个对话框,那么你为什么还要打两次Create()
?
最后我只使用对话框的指针。
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;
}
相关文章:
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- Qt - 创建主窗口前的非模态对话框
- 在Qt中创建类,其中QDialog内置特定对话框
- 当主GUI线程被阻塞时,如何从工作线程创建无模式对话框
- 创建关闭GTK+对话框的取消按钮的正确方法是什么
- 捕获新创建的模态对话框的窗口句柄
- 如何在MFC对话框上绘制/创建GDI
- 创建不会阻止主应用 MFC 的对话框
- 使用 OpenGL 创建交互式对话框
- MFC C对话框::在x64上创建挂起
- 为对话框创建窗口类
- 如何在Qt Designer(Python)中创建弹出窗口(将主窗口与对话框链接)
- 如何创建 QT 库对话框
- 如何测量创建对话框所需的时间
- 无法在另一个对话框中创建 Qt 对话框
- 在 MFC 中创建列表视图,而无需对话框
- Qt创建一个等待网络事件的对话框
- 如何在QT中为对话框创建公共对象
- 在 cpp、OpenCV 中使用"Select file"对话框创建 GUI