TabCtrl和PropertySheet的使用

    技术2022-05-18  16

     

    篇部分内容信息来自网络及孙鑫教程,恕不详述。

     

    TabCtrl和PropertySheet都是MFC实现 选项卡页面 的类,区别在于前者非模态,后者模态。

     

    TabCtrl的使用 

     

    I .建立一个MFC的Dialog,然后在ResoucreView界面的工具箱里面把TabCtrl控件放到对话框中的合适位置上。 右键点开其ClassWizard,给其关联一个CTabCtrl变量,如m_tab。

     

    注:如果不使用ClassWizard的话也可以手动添加控件TabCtrl和类成员变量(或类外变量)CTabCtrl m_tab,为使其能与Dialog中的TabCtrll控件交互,要在Dialog的DoDataExchange中加入DDX_Control(pDX,IDC_TAB1, m_tab);   II.再在ResourceView中添加两个新的Dialog,用来当做TabCtrl控件的两个子页面,注意将它们Style改为Child(不然会出问题,可以试试看),Border改为None。 使用ClassWizard为这两个对话框建立两个类,比如CPage1和CPage2,相应地在要使用它们的Dialog源文件中,声明这两个对话框对象的头文件(ClassWizard会自动在Dialog的头文件中包含Page1.h和Page2.h),同时增加一个变量int m_CurSelTab,用以表明是哪个Page即将被切换,最后再定义个CDialog* pDialog[2]用于方便操作子页面的显示。 这样一来要使用到的变量有: CTabCtrl m_tab; int m_CurSelTab; CPage1 m_page1; CPage2 m_page2; CDialog* pDialog[2]; III.在Dialog的Init函数中添加下面的代码。 //为Tab Control增加两个页面 m_tab.InsertItem(0, _T("First")); m_tab.InsertItem(1, _T("Second")); //创建两个对话框 m_page1.Create(IDD_DIALOG1, &m_tab); m_page2.Create(IDD_DIALOG2, &m_tab); //设定在Tab内显示的范围 CRect rc; m_tab.GetClientRect(rc); rc.top += 20; rc.bottom -= 8; rc.left += 8; rc.right -= 8; m_page1.MoveWindow(&rc); m_page2.MoveWindow(&rc); //把对话框对象指针保存起来 pDialog[0] = &m_page1; pDialog[1] = &m_page2; //显示初始页面 pDialog[0]->ShowWindow(SW_SHOW); pDialog[1]->ShowWindow(SW_HIDE); //保存当前选择 m_CurSelTab = 0; IV.在ClassWizard中为IDC_TAB1添加SELCHANGE消息处理函数,于其中添加下面的代码。 pDialog[m_CurSelTab]->ShowWindow(SW_HIDE); m_CurSelTab = m_tab.GetCurSel(); pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);   更多数目子页面的TabCtrl可以仿此过程构造。

     

      PropertySheet的使用

     

    I.建立一个MFC的Dialog,在ResoucreView界面右键点击树型菜单,插入...,新建2个Dialog子项中的IDD_PROPPAGE_XXX(大中小视需求而定),并为其建立对应的新类,如CProp1和CProp2,注间它们的BaseClass选CPropertyPage,如果还是选的CDialog的话,虽然初始化时可以用(CPropertyPage*)骗过编译器,但运行不了。   II.用ClassWizard新建一个基于CPropertySheet的新类,比如CPropSheet,在这个类中分别新建CProp1和CProp2的对象如m_prop1、m_prop2,并在类的第二个构造函数CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)中初始化两个子页面CProp1和CProp2。 CPropSheet::AddPage(&m_prop1); CPropSheet::AddPage(&m_prop2);   III.在要使用PropertySheet的地方使用Menu或Button,在响应函数中新建CPropSheet实例并赋名,如m_propsheet;,最后生成模态对话框将完整的PropertySheet显示出来。 CPropSheet m_propsheet("New PropertySheet"); // 建立实例并给窗口赋名 m_propsheet.DoModal(); 更多数目子页面的PropertySheet可以仿此过程构造。

    最新回复(0)