Tauruser

Enjoy Every Day
posts - 34, comments - 94, trackbacks - 0, articles - 5
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Tab Control控件使用的例子(zz)

Posted on 2006-04-30 21:49 Tauruser 阅读(3017) 评论(9)  编辑 收藏 引用

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);

Feedback

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2006-08-03 15:49 by knight
请问
3 、在主对话框中为新添加进来的两个类增加两个变量:
如:CDialog1 m_mm1;
CDialog2 m_mm2;

是怎么实现的?能具体解释一下吗?谢谢

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2007-10-06 12:14 by normal
他这不知道是从哪转载来的,你问下他自己理解了没有.你还让他解释.唉.

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-01-03 10:00 by 流浪的蚂蚁
直接创建2个新的 DiaLog对话框 把ID 设置成你要的 接着在主窗口中直接生成CDialog 对象,比如:CTabCtrlDlg.h中创建2个CDialog 对象或2个你自己继承的CDialog类对象 他这篇文章已经在其他地方看过了

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-05-22 15:59 by asdf
仅仅是想证明我“不是白痴” :)

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-05-23 08:42 by asdf
在主对话框中为新添加进来的两个类增加两个变量:
如:CDialog1 m_mm1;
CDialog2 m_mm2;

是怎么实现的?能具体解释一下吗?谢谢

方法一:
双击.h文件,在类定义的部分,手工输入这两条(public or protected,free).
方法二:
右键点击类的名字,选择增加成员变量的命令,然后...

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-08-22 21:24 by tonyrlh


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;
}

//看到了很多COPY这个版本的Tab,看到这里就很郁闷
//怎么能把代码写成这样呢?没有学过编程吗?咳......

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-08-22 21:26 by tonyrlh
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有智能,能自动找坐标吗?咳......

# re: Tab Control控件使用的例子(zz)  回复  更多评论   

2008-11-09 01:55 by new psp
原来是这样

# re: Tab Control控件使用的例子(zz)[未登录]  回复  更多评论   

2008-12-01 13:14 by TOM
用了你的方法,但进入主窗口后不能立即显示第一个对话框窗口,必须点下标签才能出来,初始化的时侯设置的第一个窗口可见的代码无效

标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: