一个基于对话框的窗口,主对话框为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又可以呢?
一般程序如果想添加一个含有标签页的设置对话框时应该怎么做?
先谢过了。
先说说代码中变量的关系:
设置对话框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又可以呢?
一般程序如果想添加一个含有标签页的设置对话框时应该怎么做?
先谢过了。
去年 //test.DoModal();
http://www.dumpt.com/img/viewer.php?file=0aun0wlh0vivc18ix7mj.jpg
图二:
http://www.dumpt.com/img/viewer.php?file=tu6or0b5a5wtt3g1f1j9.jpg
{
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();
}
囧,你的模态/非模态混在一起写?