CTabCtrl空间到底怎么用?怎么无法可视化编辑,简直太不方便了,我该怎么办?
CTabCtrl空间到底怎么用?怎么无法可视化编辑,简直太不方便了,我该怎么办?
tab页上的控件只能用代码写吗?
如何方便更好的使用tab控件?
问题点数:0、回复次数:4Top
1 楼hahu(神仙?妖怪?谢谢!)回复于 2003-11-04 22:27:28 得分 0
从CPropertyPage派生相应的叶面
调用的时候
CPropertyYouPge page1;
CPropertySheet sheet;
sheet.AddPage(&page1);
if(sheet.DoModel()==IDOK)
{
}Top
2 楼wangjs720(听雨舟)回复于 2003-11-04 22:36:18 得分 0
静下心来认真学学别人的例子吧,这种可以搜出一大堆来
Good luckTop
3 楼flyelf(空谷清音)回复于 2003-11-04 23:17:54 得分 0
可以往CTabctrl上加任何窗口Top
4 楼qrlvls( 空 气 )回复于 2003-11-05 10:02:52 得分 0
通常可以使用添加页的方法来切换,在选中一页后隐藏一个窗口然后显示另一个窗口[
可以创建几个无边框的对话框模板并生成相应的对话框页,在初始化Tab控件时动态创建窗口
下面是我以前一个工程中的对应源码
class CHardwareDlg : public CDialog
{
// Construction
public:
CHardwareDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CHardwareDlg)
enum { IDD = IDD_HARDWARE_CONFIG };
CTabCtrl m_tabHwSettings;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHardwareDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CHardwareDlg)
virtual BOOL OnInitDialog();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSelchangeSettingsTab(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
CImageList m_lstTabImages;
CProtectApp *m_pApp;
UINT m_uCurrentPage;
CHwDigitInDlg m_dlgDigitIn;
CHwDigitOutDlg m_dlgDigitOut;
CHwSimOutDlg m_dlgSimOut;
};
BOOL CHardwareDlg::OnInitDialog()
{
CRect rcTabCtrl;
CDialog::OnInitDialog();
// 初始化 TAB 控件所使用的 ImageList
m_lstTabImages.Create(16, 16, ILC_COLOR16, 3, 1);
m_lstTabImages.Add(m_pApp->LoadIcon(IDI_DIGIT_IN));
m_lstTabImages.Add(m_pApp->LoadIcon(IDI_DIGIT_OUT));
m_lstTabImages.Add(m_pApp->LoadIcon(IDI_SIMULAR_OUT));
// 为 TAB 控件添加三个页面,并将 TAB 控件与 ImageList 相关联
m_tabHwSettings.SetImageList(&m_lstTabImages);
m_tabHwSettings.InsertItem(0, _T("数字量输入"), 0);
m_tabHwSettings.InsertItem(1, _T("数字量输出"), 1);
m_tabHwSettings.InsertItem(2, _T("模拟量输出"), 2);
//调整各页面的大小
m_tabHwSettings.GetWindowRect(rcTabCtrl);
ScreenToClient(rcTabCtrl);
m_dlgDigitIn.MoveWindow(rcTabCtrl.left+2, rcTabCtrl.top+2, rcTabCtrl.right-4, rcTabCtrl.bottom-26);
m_dlgDigitOut.MoveWindow(rcTabCtrl.left+2, rcTabCtrl.top+2, rcTabCtrl.right-4, rcTabCtrl.bottom-26);
m_dlgSimOut.MoveWindow(rcTabCtrl.left+2, rcTabCtrl.top+2, rcTabCtrl.right-4, rcTabCtrl.bottom-26);
// 默认为显示“数字量输入”页面
m_tabHwSettings.SetCurSel(0);
m_dlgDigitIn.ShowWindow(SW_SHOW);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int CHardwareDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_dlgDigitIn.Create(IDD_HW_DIGIT_IN, this);
m_dlgDigitOut.Create(IDD_HW_DIGIT_OUT, this);
m_dlgSimOut.Create(IDD_HW_SIMULAR_OUT, this);
return 0;
}
void CHardwareDlg::OnSelchangeSettingsTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch(m_uCurrentPage)
{
case 0:
m_dlgDigitIn.ShowWindow(SW_HIDE);
break;
case 1:
m_dlgDigitOut.ShowWindow(SW_HIDE);
break;
case 2:
m_dlgSimOut.ShowWindow(SW_HIDE);
break;
}
m_uCurrentPage = m_tabHwSettings.GetCurSel();
switch(m_uCurrentPage)
{
case 0:
m_dlgDigitIn.ShowWindow(SW_SHOW);
break;
case 1:
m_dlgDigitOut.ShowWindow(SW_SHOW);
break;
case 2:
m_dlgSimOut.ShowWindow(SW_SHOW);
break;
}
*pResult = 0;
}Top




