VS2010+MFC使用CTabCtrl控件实现属性页功能

1、VS2010中建立一个MFC工程。步骤是文件à新建à项目àMFC应用程序à输入项目名字和目录(如图)à选择基于对话框程序(如图)其他直接下一页.最后生成一个初始项目(如图).


2、工具箱(如图)àTab Control,拉到大小合适的位置(如图).


然后画CTabCtrl控件,类向导中关联变量名为m_tab.选中选项卡à右键à添加变量(如图)

出现添加变量页(如图左),则在类Cmfcxxk1Dlg中出现变量(如图右)


3新建三个对话框。

资源视图中插入三个Dialog对话框。


属性设为Style设为Child可作为子页;Border设置为None,为无边框。


主对话框中,右键(如图左)—>类向导(ClassWizard)(如图右)à添加类。




添加类界面如图:其中基类选择为CDialogEx,新建三个类的类名分别为Cpage1Cpage2Cpage3ID号分别选为为IDD_DIALOG1IDD_DIALOG2IDD_DIALOG3(如图左)。在资源管理器中可以看到生成了三个类对应的头文件和源文件(如图右)。



在主对话框头文件mfcxxk1Dlg.h加入三个变量,Cpage1 page1Cpage2 page2Cpage3 page3。如图。


别忘了在主对话框的头文件中即mfcxxk1Dlg.h中要加入#include "Cpage1.h",#include "Cpage2.h",#include "Cpage3.h"  ,如图。


4在主对话框源文件mfcxxk1Dlg.cppBOOL Cmfcxxk1Dlg::OnInitDialog()内初始化 : 如图


// TODO:在此添加额外的初始化代码


        ///初始化代码


        //初始化m_tab控件


        m_tab.InsertItem(1,L"预处理 ");//在字符串前加’L‘来转变类型


        m_tab.InsertItem(2,L"检测 ");//int InsertItem( int nItem,LPCTSTR lpszItem );其中,nItem是控件中行的索引lpszItem是控件头的名字


        m_tab.InsertItem(3,L"识别 ");


        //建立属性页各页


        page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));


        page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));


        page3.Create(IDD_DIALOG3,GetDlgItem(IDC_TAB1));       


        //设置页面的位置在m_tab控件范围内


        CRect rect;


        m_tab.GetClientRect(&rect);//获取父对话框的区域坐标


        rect.top+=25; //子对话框的上坐标,原始为0


        rect.bottom-=4; //子对话框的下坐标,原始为区域的高


        rect.left+=4; //子对话框的左坐标,原始为0


        rect.right-=4; //子对话框的右坐标,原始为区域的宽


        page1.MoveWindow(&rect);


        page2.MoveWindow(&rect);   


        page3.MoveWindow(&rect);


        page1.ShowWindow(TRUE);


        m_tab.SetCurSel(0); //当前选项(第几个选项卡,共三个0--2)int SetCurSel( int nSelect );nSelect指定要选中的字符串的下标


        ///


5、m_tab选项卡控件属性页设置,即选择不同时时显示不同页: 双击主对话框视图文件中的选项卡(如图左),则会在主对话框的cpp文件中生成空的事件处理函数(如图右)。




m_tab选项卡的事件处理函数中加入如下代码,位置如图


voidCmfcxxk1Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)


{


        // TODO:在此添加控件通知处理程序代码


        int CurSel;


        CurSel=m_tab.GetCurSel();


        switch(CurSel)


        {


        case 0:


                  page1.ShowWindow(TRUE);


                  page2.ShowWindow(FALSE);


                  page3.ShowWindow(FALSE);


                  break;


        case 1:


                  page1.ShowWindow(FALSE);


                  page2.ShowWindow(TRUE);


                  page3.ShowWindow(FALSE);


                  break;


        case 2:


                  page1.ShowWindow(FALSE);


                  page2.ShowWindow(FALSE);


                  page3.ShowWindow(TRUE);


                  break;


        default: ;


        }


        *pResult = 0;


}



编译运行,效果如图:






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值