弹出对话框里用TAB控件第二次无法打开
我的主程序里有一个对话框进行参数设置。因为参数几百个,故弹出一个对话框里用一个tab控件弄了几页来显示参数。
当然在主程序里有个按钮按下后,
m_para.DoModal();
来显示弹出对话框
在弹出对话框里,
初始化OnInitDialog()有:
m_tab.InsertItem(0,_T("基本参数"));
m_tab.InsertItem(1,_T("报警参数"));
在tab控件和各页面弄了一个对话框,没法子,VC就是这么做的。
basicdlg.Create(IDD_BASIC,GetDlgItem(IDC_PARA));
warndlg.Create(IDD_WARN,GetDlgItem(IDC_PARA));
下面啰里啰索一大堆废话,也就是把对话框显示出来的控制
basicdlg.UpdateData(FALSE);
warndlg.UpdateData(FALSE);
basicdlg.MoveWindow(&rs);
warndlg.MoveWindow(&rs);
basicdlg.ShowWindow(true);
warndlg.ShowWindow(false);
m_tab.SetCurSel(0);
最后我要退出这个对话框回到主界面
void PARA_DLG::OnBnClickedOk()
{
basicdlg.DestroyWindow();
warndlg.DestroyWindow();
}
一切都很好,界面出来了,tab控件都可以切换。
当我第二次按弹出这个对话框按钮时,发现进不去,调试时发现当程序跑到初始化basicdlg.Create(IDD_BASIC,GetDlgItem(IDC_PARA));时就会死掉不动了,又发现退出时加了一个bool量来下列函数返回值
bool atemp;
atemp=warndlg.DestroyWindow();
atemp=basicdlg.DestroyWindow();
都返回false,即失败了,
应该是warndlg,basicdlg没退出,故无法再行创建,请问各位大虾如何处理才好,谢谢
[解决办法]
去掉那两个DestroyWindow()试试;
[解决办法]
建议把dlg放CMyTabCtrl中(派生自 CTabCtrl)
因为 OnSeletChange会用到。
在OnSeletChange中:
1.delete all dlgs
if(IsWindow(m_dlg1.m_hwnd)) DestroyWindow(m_dlg1.m_hWnd);
if(IsWindow(m_dlg2.m_hwnd)) DestroyWindow(m_dlg2.m_hWnd);
....
2.产生新的:
CRect rc;
GetClientRect(&rc);
rc.top +=20;
//
int now=GetCurSel();
switch(now)
{
case 0:
m_dlg1.Create(MAKEINTRESOURCE(IDD_DIALOG1),this);
m_dlg1.MoveWindow(rc.left,rc.top,rc.Width(),rc.Height())
m_dlg1.ShowWindow(SW_SHOW);
break;
....
}
[解决办法]
那个窗口其实并没有destroy掉.
//如果这样定义,就不用Create了.
BASIC basicdlg;
MARK_DLG markdlg;
NOFLIGHT_DLG noflightdlg;
OTHER_DLG otherdlg;
WARN_DLG warndlg;
//如果要Create,必须弄成指针.
//顺序是 new...Create....DestroyWindow....delete...
basicdlg.Create(IDD_BASIC,GetDlgItem(IDC_PARA));
warndlg.Create(IDD_WARN,GetDlgItem(IDC_PARA));
[解决办法]