vc6.0 中TabControl控件的具体使用
哪位大哥能提供一下vc6.0 中TabControl控件的基本使用方法啊,可以将其它的Dialog加入其中一个tab嘛,此时怎么传递Dialog中的数据啊 问题点数:30、回复次数:5Top
1 楼Mackz(在相互)回复于 2005-11-10 00:46:57 得分 0
创建选项卡 (TabControl) 控件
创建选项卡 (TabControl) 控件的方式取决于您是在对话框中使用该控件还是在非对话框窗口中创建它。
直接在对话框中使用 CTabCtrl
在对话框编辑器中,将选项卡 (TabControl) 控件添加到对话框模板资源中。指定其控件 ID。
用添加成员变量向导添加具有 Control 属性且类型为 CTabCtrl 的成员变量。可以用该成员调用 CTabCtrl 成员函数。
在对话框类中为需要处理的任何选项卡 (TabControl) 控件通知消息映射处理函数。有关更多信息,请参见将消息映射到函数。
在 OnInitDialog 中,设置 CTabCtrl 的样式。
在非对话框窗口中使用 CTabCtrl
在视图或窗口类中定义此控件。
调用此控件的 Create 成员函数,可能在 OnInitialUpdate 中,也可能与父窗口的 OnCreate 处理函数一样早(如果正在创建此控件的子类)。设置此控件的样式。
创建了 CTabCtrl 对象后,可以设置或清除下列扩展样式:
TCS_EX_FLATSEPARATORS 选项卡 (TabControl) 控件将在选项卡项之间绘制分隔符。该扩展样式仅影响样式为 TCS_BUTTONS 和 TCS_FLATBUTTONS 的选项卡 (TabControl) 控件。默认情况下,用 TCS_FLATBUTTONS 样式创建选项卡 (TabControl) 控件将设置该扩展样式。
TCS_EX_REGISTERDROP 在将对象拖动到控件中的选项卡项上时,选项卡 (TabControl) 控件生成 TCN_GETOBJECT 通知消息以请求放置目标对象。
注意 若要接收 TCN_GETOBJECT 通知,必须通过调用 AfxOleInit 初始化 OLE 库。
创建了控件后,可以通过分别调用 GetExtendedStyle 和 SetExtendedStyle 成员函数来检索和设置这些样式。
例如,用下列代码行设置 TCS_EX_FLATSEPARATORS 样式:
DWORD dwExStyle= m_tabCtrl.GetExtendedStyle();
m_tabCtrl.SetExtendedStyle(dwExStyle | TCS_EX_FLATSEPARATORS);
用下列代码行从 CTabCtrl 对象中清除 TCS_EX_FLATSEPARATORS 样式:
DWORD dwExStyle= m_tabCtrl.GetExtendedStyle();
m_tabCtrl.SetExtendedStyle(dwExStyle & ~TCS_EX_FLATSEPARATORS);
这将移除出现在 CTabCtrl 对象按钮之间的分隔符。
请参见
使用 CTabCtrl | Windows 公共控件和 MFC 类
向选项卡 (TabControl) 控件添加选项卡
创建选项卡 (TabControl) 控件 (CTabCtrl) 后,需要多少选项卡,就添加多少。
添加选项卡项
准备 TCITEM 结构。
调用 CTabCtrl::InsertItem 以传递该结构。
对其他选项卡项重复步骤 1 和 2。
有关更多信息,请参见 Platform SDK 中的创建选项卡 (TabControl) 控件。
请参见
使用 CTabCtrl | Windows 公共控件和 MFC 类
处理选项卡 (TabControl) 控件通知消息
当用户单击选项卡或按钮时,选项卡 (TabControl) 控件 (CTabCtrl) 向其父窗口发送通知消息。如果要进行某种响应,请处理这些消息。例如,当用户单击选项卡时,您也许想在显示选项卡之前在页面上预设控件数据。
处理来自视图或对话框类中的选项卡 (TabControl) 控件的 WM_NOTIFY 消息。基于正在处理的通知消息,用“属性”窗口创建带 switch 语句的 OnChildNotify 处理函数。有关选项卡 (TabControl) 控件可以发送到其父窗口的通知的列表,请参见 Platform SDK 中的选项卡 (TabControl) 控件参考的 Notifications 一节。
请参见
使用 CTabCtrl | Windows 公共控件和 MFC 类
Top
2 楼niefuhua(阳光)回复于 2005-11-10 08:36:46 得分 0
Mackz(在相互) 牛必,每次都在我前面!:)Top
3 楼lixiaosan(小三)回复于 2005-11-10 08:46:55 得分 30
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() 函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面
的尺寸。
Top
4 楼lineuser(蓝冰)回复于 2006-06-08 10:13:56 得分 0
markTop
5 楼caplee(老光)回复于 2006-06-09 17:14:33 得分 0
markTop




