SDI工程:一个菜单里面有多个子菜单,单击每个子菜单都可打开一个对应的非模态对话框(视图的子窗口)。想实现的功能如下:当单击某一个子菜单1时,程序应能判断视图是否有已经打开的非模态对话框,如果有就关闭它,并delete其指针,同时,显示对应的非模态对话框。
我知道比较笨的方法,即:逐一判断所有的已经定义的非模态对话框指针是否为NULL,如果不为NULL,就DestroyWindow(),然后delete 指针,再将指针赋值NULL。最后,根据需要创建并显示需要的非模态的对话框。
由于涉及到的对话框太多,上述方法太麻烦,不知道各位大侠有没有简便的方法。
谢谢。
不知能否通过GetDlgItem( dlgID )获取指针,然后删除,好像不行,如果能行就好处理了。
我知道比较笨的方法,即:逐一判断所有的已经定义的非模态对话框指针是否为NULL,如果不为NULL,就DestroyWindow(),然后delete 指针,再将指针赋值NULL。最后,根据需要创建并显示需要的非模态的对话框。
由于涉及到的对话框太多,上述方法太麻烦,不知道各位大侠有没有简便的方法。
谢谢。
不知能否通过GetDlgItem( dlgID )获取指针,然后删除,好像不行,如果能行就好处理了。
如果每次可以显示多个对话框的话,可以把创建的对话框句柄写入一个map数组中,对话框销毁时从数组中删除。
在CSampleView(FORMVIEW)头文件中定义了多个非模态对话框,作为视图的子窗体。
CDLG1* pdlg1;
CDLG2* pdlg2;
CDLG3* pdlg3;
CDLG4* pdlg4;
.........
CDLGn* pdlgn;在视图构造函数中将它们都赋值为NULL。
单击菜单i,创建pdlgi并显示。如果有打开的其它对话框,则删除该对话框,并delete其指针。
问题是如何判断视图中是否有打开的对话框,如果挨个判断,又太笨,请问有没有其它方法。
这样可以不?PVOID pCurrentDlg = NULL;单击一个菜单后, 如果发现pCurrentDlg不为0就删除对话框.然后创建你需要的对话框, 然后 pCurrentDlg就赋值成 这个对话框的指针.可是这不是很容易吗?
我看错了吗?
pCurrentDlg->DestroyWindow()
但是不行,出错。
C...Vew::OnCreateDlgA()
{
if (m_pDlg)
delete m_pDlg;
m_pDlg = new CDlgA(this);
}C...View::OnCreateDlgB()
{
if (m_pDlg)
delete m_pDlg;
m_pDlg = new CDlgB(this);
}