62 void SetActiveViewIndex(int iIndex); 63 void SetActiveView(const CWnd* pWnd); 64 65 //按索引获取某个视图页面 66 CWnd* GetView(int iIndex) const; 67 //按窗口获取视图页面的索引 68 int GetIndex(const CWnd* pWnd) const; 69 70 //获取视图页面数量 71 int GetViewCount() const; 72 73 //设置视图页面的标题 74 BOOL SetViewTitle(int iIndex,LPCTSTR pszTitle); 75 BOOL SetViewTitle(const CWnd* pWnd,LPCTSTR pszTitle); 76 //获取视图页面的标题 77 BOOL GetViewTitle(const CWnd* pWnd,LPTSTR& pszTitle) const; 78 BOOL GetViewTitle(int iIndex,LPTSTR& pszTitle) const; 79 80 //设置视图页面的图像 81 BOOL SetViewImage(const CWnd* pWnd,int iImage); 82 BOOL SetViewImage(int iIndex,int iImage); 83 //获取视图页面的图像 84 BOOL GetViewImage(const CWnd* pWnd,int& iImage) const; 85 BOOL GetViewImage(int iIndex,int& iImage) const; 86 87 //设置视图页面的数据 88 BOOL SetViewData(int iIndex,LPVOID pData); 89 BOOL SetViewData(const CWnd* pWnd,LPVOID pData); 90 //获取视图页面的数据 91 BOOL GetViewData(int iIndex,LPVOID& pData) const; 92 BOOL GetViewData(const CWnd* pWnd,LPVOID& pData) const; 93 94 //是否为内部创建的视图页面 95 BOOL IsInnerView(const CWnd* pWnd,BOOL& bInner) const; 96 BOOL IsInnerView(int iIndex,BOOL& bInner) const; 97 98 //设置tab标签可显示的最大文本长度 99 void SetTabMaxTextLen(size_t len); 100 //获取tab标签可显示的最大文本长度 101 size_t GetTabMaxTextLen() const; 102 103 virtual void ShortenTitle(LPCTSTR pszTitle,CString& strShortTitle); 104 105protected: 106 BOOL SetViewInner(const CWnd* pWnd,BOOL bInner); 107 BOOL SetViewInner(int iIndex,BOOL bInner); 108 DWORD GetUniqueId(); 109 BOOL IsValidViewIndex(int iIndex) const; 110 void UpdateLayout(); 111 112protected: 113 virtual BOOL SubWindowProc(UINT uMsg,WPARAM wParam,LPARAM lParam); 114 virtual int CalcTabHeight(); 115 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItem); 116 virtual void OnViewActivated(int iIndex); 117 virtual void OnTabContextMenu(int iIndex,CPoint point); 118 virtual BOOL UpdateTooltipText(LPNMTTDISPINFO pTTDI); 119 120protected: 121 DECLARE_MESSAGE_MAP() 122 afx_msg int OnCreate(LPCREATESTRUCT lpcs); 123 afx_msg void OnDestroy(); 124 afx_msg void OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult); 125 afx_msg void OnTcnSelChange(NMHDR* pNMHDR,LRESULT *pResult); 126 afx_msg void OnSize(UINT nType, int cx, int cy); 127 afx_msg void OnSetFocus(CWnd* pOldWnd); 128 virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 129 130public: 131 virtual void OnInitialUpdate(); 132 133private: 134 CArray m_UniqueIDs; 135 int m_iActiveView; 136 int m_cyTabHeight; 137 size_t m_nMaxTabTextLen; 138}; 139 140#endif 从上可知,CTabView主要包括2大类操作方法,一是针对视图页面窗口,二是针对Tab标签扩展数据。说明如下:1)增加视图页面:AddIView,有2个重载形式,其中带CRuntimeClass和CCreateConext类型参数的用于创建内部窗口,成功返回对应的窗口,否则为NULL;带CWnd参数的用于容纳外部窗口,成功返回TRUE,否则返回FALSE。2)插入视图页面:InsertView,有2个重载形式,其中带CRuntimeClass和CCreateConext类型参数的用于创建内部窗口,成功返回对应的窗口,否则为NULL;带CWnd参数的用于容纳外部窗口,成功返回TRUE,否则返回FALSE。3)移除某个视图页面:RemoveView,有2个重载形式,其中int类型参数的用于按索引移除,CWnd类型的用于按窗口对象移除。4)移除所有视图页面:RemoveAllView。5)获取活动视图页面:有2个方法,GetActiveView如果无活动视图页面,则返回NULL,否则返回对应的窗口;GetActiveViewIndex如果无活动视图页面,则返回-1,否则返回>=0的索引值。5)设置活动视图页面:有2个方法:SetActiveView按窗口来设置,SetActiveViewIndex按索引来设置。6)视图页面窗口与索引的相互转换:GetView由窗口得到其索引,操作失败返回-1, |