Tab控件实现动态添加页面

作者在 2006-12-30 07:45:00 发布以下内容

     在编程的时候我们经常要用到TAB控件,然而在很多情况我们并不确定究竟要添加几个TAB页面,而是在程序运行中动态添加页面,而且每个页面里面可能都包含其它控件,比如页面包含有一个LISTBOX的控件,当用户选择不同的TAB标签时将显示对应的页面,并且用户可以根据自己的意愿任意添加和删除TAB页面.

    实现思路:利用单链表的数据结构实现TAB页面与LISTBOX的一一对应.首先新建立一个FORMVIEW的对话框资源,类名为CExAnsyTabFV(因为在下是在做一个小东西的时候用到了这个,所以就直接拿了那里的代码,懒得去改,命名有点麻烦,请谅解^_^).

    然后添加3个成员变量int m_TabNumber;//记录TAB页面编号
                             CExAnsyTabFV *m_pNext;//指向下一个FORMVIEW的指针
                             CListBox m_ExAnsyTabList//ListBox控件显示对应TAB页面的内容

    再新建一个对话框资源,添加一个TAB控件,一个添加页面和一个删除页面的按钮,命名为ExDataAnsyDlg.初始化时建立一个CExAnsyTabFV类的表头,令m_TabNumber=-1;m_pNext=NULL,当用户单击添加页面时,新建一个CExAnsyTabFV的节点,并设置其编号与TAB页面的编号相同,再链到表尾即可.当用户删除页面时只要删除TAB页面对应的节点即可.

    具体实现:
    下面代码实现的主要功能是,通过选择TREE控件内的项目,可以把相应的内容添加到对应的TAB页面中去,并显示在LISTBOX列表框内,并在编辑框中显示标题,通过改变编辑框的标题从而改变TAB页面的标题.此外,用户可以自由添加和删除TAB页面.
注:为简单起见,下面写出的代码只是提供了具体的实现方法.大家可以根据自己的实际情况进行改写.
(嘿嘿,大深夜了写下这个错误可能在所难免,或者注释有很多地方不详细,望各位网友包涵,敬请批评,在下一定改正@_@~)
//CExAnsyTabFV类的定义
class CExAnsyTabFV : public CDialog
{
// Construction
public:
 int m_TabNumber;
    CExAnsyTabFV *m_pNext;
 CExAnsyTabFV(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
 //{{AFX_DATA(CExAnsyTabFV)
 enum { IDD = IDD_EXANSY_FORMVIEW };
 CListBox m_ExAnsyTabList;
 //}}AFX_DATA


// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CExAnsyTabFV)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:

 // Generated message map functions
 //{{AFX_MSG(CExAnsyTabFV)
  // NOTE: the ClassWizard will add member functions here
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

//CExDataAnsyDlg的定义.
//包括TAB控件,TREE控件(向LISTBOX里添加内容),2个BUTTON,一个EDIT控件(显示和改变TAB页面标题)
class CExDataAnsyDlg : public CDialog
{
// Construction
public:
 void AutoExAnsyTabTilte(CExAnsyTabFV *pActiveFV);
 CString GetExAnsyTabTitle(int nPos);
 void ChangeExAnsyTabTitle(int nPos,CString sTitle);
 void DoTabShow(int nSel);
 int m_MaxShtNum;
 CImageList *m_pImageListTab;
 CExAnsyTabFV *m_pHeadFV;//CExAnsyTabFV链表头指针
 CExAnsyTabFV *m_pTailFV;//CExAnsyTabFV链表尾指针
 CExAnsyTabFV *m_pCurFV;//CExAnsyTabFV链表当前指针
 CImageList m_ImageList;
 HTREEITEM m_TreeRoot;//TREE根节点
 CExDataAnsyDlg(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
 //{{AFX_DATA(CExDataAnsyDlg)
 enum { IDD = IDD_EXDATAANSY_DIALOG };
 CTabCtrl m_ExAnsyTab;//TAB控件
 CTreeCtrl m_ExAnsyTree;//TREE控件
 CString m_m_ExAnsySheetTitleEdit;//CEDIT的变量
  //}}AFX_DATA


// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CExDataAnsyDlg)
 protected:
 virtual void DoDataExchange

VC++ | 阅读 4211 次
文章评论,共0条
游客请输入验证码
浏览20502次
文章分类
最新评论