我不想用CPropertySheet和来做属性页,我选择了CTabCtrl,然后在CTabCtrl内添加对话框。过程大致如下:一、在对话框 COutDlg 中添加一个 TabCtrl,ID=IDC_TAB_CTRL二、建立一个对话框CInDlg(ID=IDD_DLG_IN),并添加一个 CListCtrl 控件,ID=IDC_LIST三、建立其他的CIn1Dlg, CIn2Dlg,分别作为TabCtrl的第2页和第3页四、在COutDlg中添加成员变量:
CInDlg m_dlgIn; CIn1Dlg m_dlgIn1; CIn2Dlg m_dlgIn2;
CTabCtrl m_tab;五、在COutDlg::OnInitDialog(...)中添加创建对话框的内容:
CRect rect;
m_dlgIn.Create(IDD_DLG_IN, this);// 创建对话框
m_dlgIn.GetWindowRect(&rect); // 获得对话框的大小
m_dlgIn.MoveWindow(20, 30, rect.Width(), rect.Height());
m_dlgIn.ShowWindow(SW_HIDE); // 并设置为隐藏 m_dlgIn1.Create(IDD_DLG_IN1, this);// 创建对话框
m_dlgIn1.MoveWindow(20, 30, rect.Width(), rect.Height());
m_dlgIn1.ShowWindow(SW_HIDE); // 并设置为隐藏...
六、重载COutDlg::OnSelchangeTab和COutDlg::OnSelchangingTab
void COutDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch (m_tab.GetCurrentSel()) {
case 0: m_dlgIn.ShowWindow(SW_SHOW); break;
case 1: m_dlgIn1.ShowWindow(SW_SHOW); break;
case 2: m_dlgIn2.ShowWindow(SW_SHOW); break;
default: m_dlgIn.ShowWindow(SW_SHOW); break;
}
}
void CRouterDlg::OnSelchangingTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch (m_tab.GetCurrentSel()) {
case 0: m_dlgIn.ShowWindow(SW_HIDE); break;
case 1: m_dlgIn1.ShowWindow(SW_HIDE); break;
case 2: m_dlgIn2.ShowWindow(SW_HIDE); break;
default: m_dlgIn.ShowWindow(SW_HIDE); break;
}
}然后 编译 连接 运行,没问题。但是: 如果你在CInDlg中的CListCtrl中单击(使CListCtrl获得焦点)后,再用其他的一个窗口放到最前面(将CListCtrl空间盖住),然后再将我们的对话框切换到最前面来时,可怜的CListCtrl却不会刷新!!!!!!
为什么?
是我少了什么步骤了吗? 各位给各提示,OK?
CInDlg m_dlgIn; CIn1Dlg m_dlgIn1; CIn2Dlg m_dlgIn2;
CTabCtrl m_tab;五、在COutDlg::OnInitDialog(...)中添加创建对话框的内容:
CRect rect;
m_dlgIn.Create(IDD_DLG_IN, this);// 创建对话框
m_dlgIn.GetWindowRect(&rect); // 获得对话框的大小
m_dlgIn.MoveWindow(20, 30, rect.Width(), rect.Height());
m_dlgIn.ShowWindow(SW_HIDE); // 并设置为隐藏 m_dlgIn1.Create(IDD_DLG_IN1, this);// 创建对话框
m_dlgIn1.MoveWindow(20, 30, rect.Width(), rect.Height());
m_dlgIn1.ShowWindow(SW_HIDE); // 并设置为隐藏...
六、重载COutDlg::OnSelchangeTab和COutDlg::OnSelchangingTab
void COutDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch (m_tab.GetCurrentSel()) {
case 0: m_dlgIn.ShowWindow(SW_SHOW); break;
case 1: m_dlgIn1.ShowWindow(SW_SHOW); break;
case 2: m_dlgIn2.ShowWindow(SW_SHOW); break;
default: m_dlgIn.ShowWindow(SW_SHOW); break;
}
}
void CRouterDlg::OnSelchangingTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch (m_tab.GetCurrentSel()) {
case 0: m_dlgIn.ShowWindow(SW_HIDE); break;
case 1: m_dlgIn1.ShowWindow(SW_HIDE); break;
case 2: m_dlgIn2.ShowWindow(SW_HIDE); break;
default: m_dlgIn.ShowWindow(SW_HIDE); break;
}
}然后 编译 连接 运行,没问题。但是: 如果你在CInDlg中的CListCtrl中单击(使CListCtrl获得焦点)后,再用其他的一个窗口放到最前面(将CListCtrl空间盖住),然后再将我们的对话框切换到最前面来时,可怜的CListCtrl却不会刷新!!!!!!
为什么?
是我少了什么步骤了吗? 各位给各提示,OK?
我已经帮你发送过去了,帮忙看看,OK?谢谢
if (IsIconic())
....
else
{
CDialog::OnPaint();
m_dlgIn.Invalidate();
m_dlgIn1.Invalidate();
m_dlgIn2.Invalidate();
}