一个基于对话框的窗口,主对话框为MainDlg,我希望在主对话框中点击一个按钮之后弹出设置窗口(SettingDialog),设置窗口中含有TabCtrl。不过问题是点击按钮之后弹出的子窗口里面是空白的,即使我已经为TabCtrl添加了标签。
先说说代码中变量的关系:
设置对话框IDD_SETTING_DIALOG对应类CSettingDialog;
TabControl控件标签一,IDD_TABPAGE_1对应类CTabPage1
TabControl控件标签二,IDD_TABPAGE_2对应类CTabPage2
主窗口弹出设置窗口的代码:void CNTFSFinderDlg::OnBnClickedAbout()
{
CSettingDialog test;
if(!test.m_hWnd)
{
test.Create(IDD_SETTING_DIALOG);
test.ShowWindow(SW_SHOW);
}
else
{
test.DestroyWindow();
test.Create(IDD_SETTING_DIALOG);
test.ShowWindow(SW_SHOW);
}
test.DoModal();
}
设置窗口中初始化TabCtrl的代码://SettingDialog.h
public:
CTabCtrl m_tab;
CTabPage1 m_page1;
CTabPage2 m_page2;
int m_CurSelTab; //表明是哪个Page即将被切换 CDialog* pDialog[2];
//……
//SettingDialog.cpp
BOOL CSettingDialog::OnInitDialog()
{
CDialog::OnInitDialog(); //为Tab Control增加两个页面
     m_tab.InsertItem(0, _T("First"));
     m_tab.InsertItem(1, _T("Second"));
    
     //创建两个对话框
     m_page1.Create(IDD_TABPAGE_1, &m_tab);
     m_page2.Create(IDD_TABPAGE_2, &m_tab);     //设定在Tab内显示的范围
     CRect rc;
     m_tab.GetClientRect(rc);
     rc.top += 20;
     rc.bottom -= 8;
     rc.left += 8;
     rc.right -= 8;     m_page1.MoveWindow(&rc);
     m_page2.MoveWindow(&rc);     //把对话框对象指针保存起来
     pDialog[0] = &m_page1;
     pDialog[1] = &m_page2;     //显示初始页面
     pDialog[0]->ShowWindow(SW_SHOW);
     pDialog[1]->ShowWindow(SW_HIDE);     //保存当前选择
     m_CurSelTab = 0; return TRUE;  
}
这样的效果如下(没有“确定”“取消”“应用”按钮,且标签页无法点击,程序的两个窗口都失去焦点,只能在任务栏右击关闭程序):
如果我在WinMain中设置CSettingDialog为主窗口,
效果如下(正常):
我想知道我的代码有什么问题?
为什么在主窗口创建子窗口,子窗口中含有TabControl时显示不正常,
而直接在主窗口显示TabControl又可以呢?
一般程序如果想添加一个含有标签页的设置对话框时应该怎么做?
先谢过了。

解决方案 »

  1.   

    CSettingDialog test;声明为CNTFSFinderDlg类的成员变量
    去年    //test.DoModal();
      

  2.   

    可能是图片中转站的问题,直接点击链接就可以打开图片图一:
    http://www.dumpt.com/img/viewer.php?file=0aun0wlh0vivc18ix7mj.jpg
    图二:
    http://www.dumpt.com/img/viewer.php?file=tu6or0b5a5wtt3g1f1j9.jpg
      

  3.   

    void CNTFSFinderDlg::OnBnClickedAbout()
    {    
        CSettingDialog test;
        if(!test.m_hWnd)
        {
            test.Create(IDD_SETTING_DIALOG);
            test.ShowWindow(SW_SHOW);
        }
        else
        {
            test.DestroyWindow();
            test.Create(IDD_SETTING_DIALOG);
            test.ShowWindow(SW_SHOW);
        }
        test.DoModal();
    }
    囧,你的模态/非模态混在一起写?