VC中的Tab Control 如何使用.怎样和子窗体连.

VC中的Tab Control 如何使用.怎样和子窗体连.,第1张

VC tab control 使用简单例子 1. 新建一个MFC工程--MFC AppWizard(exe), 取名TabTest, 选择Dialog based, 然后Finish. 2. 在话框上添加Tab Control控件并在Property属性中设置ID为IDC_TAB. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl. 3. 在对话框的初始化函数OnInitDialog里面添加如下代码: m_tab.InsertItem(0, "第一页")m_tab.InsertItem(1, "第二页")4.在对话框资源里面添加两个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2 . 在Property属性中设置style为Child, Border为None. 再分别为其添加对应的基于CDialog类CPara1, CPara2. 5. 在CTabTestDlg类中添加两个成员变量m_para1, m_para2, 分别是两个子对话框的实例. 代码如下: CPage2 m_page2CPage1 m_page16. 在IDD_TABTEST_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码: //关联对话框,并且将IDC_TABTEST控件设为父窗口 m_page1.Create(IDD_PAGE1,GetDlgItem(IDC_TAB))m_page2.Create(IDD_PAGE2,GetDlgItem(IDC_TAB)) //获得IDC_TABTEST客户区大小 CRect rsm_tab.GetClientRect(&rs)//调整子对话框在父窗口中的位置 rs.top+=20 rs.bottom-=20 rs.left+=20 rs.right-=20 //设置子对话框尺寸并移动到指定位置 m_page1.MoveWindow(&rs)m_page2.MoveWindow(&rs)//分别设置隐藏和显示 m_page1.ShowWindow(true)m_page2.ShowWindow(false) //设置默认的选项卡 m_tab.SetCurSel(0)7. 添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下: int CurSel = m_tab.GetCurSel()m_page1.ShowWindow(false)m_page2.ShowWindow(false)switch(CurSel) { case 0: m_page1.ShowWindow(true)break case 1: m_page2.ShowWindow(true)breakdefault: break} ok了,运行试试!

Tab Control控件使用的例子

1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl

2、创建两个新的对话框资源,其属性作如下修改:

Border:none //边界为空,这样它就没了标题栏

Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。

其它如果没有必要,就不用改了。

在上面加一些控件什么的,具体 *** 作跟普通对话框没有区别。

完成后从这两个对话框模板生成两个新的对话框类。

3、在主对话框中为新添加进来的两个类增加两个变量:

如:CDialog1 m_mm1

CDialog2 m_mm2

4、在主对话框的OnInitDialog()函数中添加如下类似的代码:

TCITEM item

item.mask = TCIF_TEXT

item.pszText = "第一页"

m_tabctrl.InsertItem (0,&item)

item.pszText ="第二页"

m_tabctrl.InsertItem (1,&item)

m_mm1.Create (IDD_DIALOG1,&m_tabctrl)

m_mm2.Create (IDD_DIALOG2,&m_tabctrl)

m_mm1.SetWindowPos (NULL,10,30,400,100,SWP_SHOWWINDOW)

m_mm2.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW )

解释如下:

两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。

SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。

5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个 *** 作。

在事件处理中添加如下代码,如下例:

void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)

{

CRect r

m_tabctrl.GetClientRect (&r)

switch(m_tabctrl.GetCurSel())

{

case 0:

m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW)

m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW )

break

case 1:

m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW)

m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW )

break

}

*pResult = 0

}

要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel() 函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。

或者:

m_Tab.InsertItem(0,"第一页")

m_Tab.InsertItem(1,"第二页")

m_Tab.InsertItem(2,"第三页")

m_Tab.InsertItem(3,"第四页")

m_PageA.Create(IDD_PROPPAGE_A,&m_Tab)

m_PageB.Create(IDD_PROPPAGE_B,&m_Tab)

m_PageC.Create(IDD_PROPPAGE_C,&m_Tab)

m_PageD.Create(IDD_PROPPAGE_D,&m_Tab)

m_PageA.ShowWindow(SW_SHOW)

m_PageB.ShowWindow(SW_HIDE)

m_PageC.ShowWindow(SW_HIDE)

m_PageD.ShowWindow(SW_HIDE)

tab控件下方本来就只有一个显示区域 并不存在你所说的情况

你看到某些程序tab上面点击 切换下面显示不同界面是 下面的同一个区域加载不同的无标题栏无边框子对话框实现滴

给你个 Visual.C++.范例开发大全 .陈国建 上的例子看看吧


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11617520.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存