首页 用法详解CCustomTabCtrl

用法详解CCustomTabCtrl

举报
开通vip

用法详解CCustomTabCtrl用法详解CCustomTabCtrl CCustomTabCtrl - MFC Tab Control By Andrzej Markowski | 17 May 2006 Introduction CCustomTabCtrl is an MFC control derived from the CWnd class. You can find a similar control in Microsoft Management Console Services used to switch betwee...

用法详解CCustomTabCtrl
用法详解CCustomTabCtrl CCustomTabCtrl - MFC Tab Control By Andrzej Markowski | 17 May 2006 Introduction CCustomTabCtrl is an MFC control derived from the CWnd class. You can find a similar control in Microsoft Management Console Services used to switch between extended and standard views. CCustomTabCtrl can be created in one orientation only - bottom. XP Themes scroll buttons are supported if the operating system is WinXP and XP Themes are enabled. CCustomTabCtrl control also works properly if the state of XP Themes enabling is changed during the running of the application. Using the code in dialog applications Using the CCustomTabCtrl class is very simple. To add it to your project, please follow the steps given below: 1. Add ThemeUtil.h, ThemeUtil.cpp, CustomTabCtrl.h, CustomTabCtrl.cpp, Tmschema.h and Schemadef.h to your project. 2. Include CustomTabCtrl.h in the appropriate header file - usually dialog class header where the class CCustomTabCtrl is used: //CustomTabCtrlDemoDlg.h : header file #include "CustomTabCtrl.h" 3. Declare m_ctrlTab object of type CCustomTabCtrl in your dialog header: //CustomTabCtrlDemoDlg.h : header file class CCustomTabCtrlDemoDlg : CDialog { ...... private: CCustomTabCtrl m_ctrlTab; }; 4. Create the control: a. Dynamically by calling Create. In your dialog's OnInitDialog, add the following code: //CustomTabCtrlDemoDlg.cpp : definition file m_ctrlTab.Create(WS_VISIBLE|WS_CHILD, CRect(0,0,100,20), this, 1); b. Via a dialog template. Create a custom control in the dialog resource and then in the control's properties, specify the class name as "CCustomTabCtrl": To link up m_ctrlTab with the control, add the following in your dialog's DoDataExchange: // CustomTabCtrlDemoDlg.cpp : definition file void CCustomTabCtrlDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCustomTabCtrlDemoDlg) DDX_Control(pDX, IDC_TAB, m_ctrlTab); //}}AFX_DATA_MAP } 5. After creating the tab control, add as many tabs as you need. To add tab items, call InsertItem in your dialog's OnInitDialog: //CustomTabCtrlDemoDlg.cpp : definition file m_ctrlTab.InsertItem(0,"SS_BLACKRECT"); m_ctrlTab.InsertItem(1,"SS_GRAY"); m_ctrlTab.InsertItem(2,"SS_WHITERECT"); m_ctrlTab.SetCurSel(0); 6. Process WM_NOTIFY messages from the tab control in your dialog class. As the user clicks tab, the tab control (CCustomTabCtrl) sends notification messages (CTCN_SELCHANGE) to its parent window. Handle these messages if you want to do something in response. In the example shown below, I modify the style of the m_ctrlColor control (CStatic): //CustomTabCtrlDemoDlg.cpp : definition file BEGIN_MESSAGE_MAP(CCustomTabCtrlDemoDlg, CDialog) //{{AFX_MSG_MAP(CCustomTabCtrlDemoDlg) ON_NOTIFY(CTCN_SELCHANGE, IDC_TAB, OnSelchangeTab) //}}AFX_MSG_MAP END_MESSAGE_MAP() .... void CCustomTabCtrlDemoDlg::OnSelchangeTab( NMHDR* pNMHDR, LRESULT* pResult) { switch(m_ctrlTab.GetCurSel()) { case 0: // Black rectangle m_ctrlColor.ModifyStyle( SS_BLACKRECT|SS_GRAYRECT|SS_WHITERECT,SS_BLACKRECT); break; case 1: // Gray rectangle m_ctrlColor.ModifyStyle( SS_BLACKRECT|SS_GRAYRECT|SS_WHITERECT,SS_GRAYRECT); break; default: // White rectangle m_ctrlColor.ModifyStyle( SS_BLACKRECT|SS_GRAYRECT|SS_WHITERECT,SS_WHITERECT); break; } m_ctrlColor.Invalidate(); *pResult = 0; } 7. Finally, move the tab control in the right place on the dialog: // CustomTabCtrlDemoDlg.cpp : definition file void CCustomTabCtrlDemoDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if(m_ctrlTab.m_hWnd && cx && cy) { CRect r; m_ctrlTab.GetWindowRect(r); ScreenToClient(r); m_ctrlTab.MoveWindow(r.left,cy-r.Height()- r.left,cx-2*r.left,r.Height()); } } Using the code in SDI/MDI applications Create a SDI/MDI project and follow the steps below: 1. Add TabMDIFrameWnd.h and TabMDIFrameWnd.cpp to your MDI project, TabSDIFrameWnd.h and TabSDIFrameWnd.cpp to the SDI project. 2. Replace CFrameWnd with CTabSDIFrameWnd and CMDIFrameWnd with CTabMDIFrameWnd in MainFrm.h and MainFrm.cpp files. 3. Modify CMainFrame::OnCreate() like this: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } if(!m_wndTab.Create( WS_CHILD|WS_VISIBLE|CTCS_FOURBUTTONS|CTCS_DRAGMOVE| CTCS_TOOLTIPS,CRect(0,0,0,m_nHeight),this,IDC_TABCTRL)) { TRACE0("Failed to create tab control\n"); return -1; } m_wndTab.SetDragCursors(AfxGetApp()->LoadCursor( IDC_CURSORMOVE),NULL); m_wndTab.SetItemTooltipText(CTCID_FIRSTBUTTON,"First"); m_wndTab.SetItemTooltipText(CTCID_PREVBUTTON,"Prev"); m_wndTab.SetItemTooltipText(CTCID_NEXTBUTTON,"Next"); m_wndTab.SetItemTooltipText(CTCID_LASTBUTTON,"Last"); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); ... } 4. In the MDI project, add pMainFrame->AddView(sLabel,this,sTooltip) in CView::OnInitialUpdate(), pMainFrame->DeleteView(this) in CView::OnDestroy() and pMainFrame->OnActivateView(pActivateView) in CView::OnActivateView(). To edit a view, double click on the tab control item. 5. In the SDI application, insert pMainFrame->AddView(sLabel,this,sTooltip) in CView::OnInitialUpdate() and pMainFrame->DeleteContents() in CDocument::DeleteContents(). To add, delete and edit a view, right click on the tab control and use a popup menu. CCustomTabCtrl class members , Construction , Attributes , Operations , Notification messages , Error codes Construction CCustomTabCtrl Constructs a CCustomTabCtrl object. Create Creates a tab control and attaches it to an instance of CCustomTabCtrl object. Attributes GetItemCount Retrieves the number of tabs in the tab control. GetCurSel Determines the currently selected tab in a tab control. SetCurSel Selects a tab in a tab control. IsItemHighlighted Retrieves the highlight state of a tab item. HighlightItem Sets the item's highlight state. GetItemData Retrieves the application-specific value associated with an item. SetItemData Sets the item's application-specific value. GetItemText Retrieves the text of a tab item. SetItemText Changes the text of a tab item. GetItemRect Retrieves the rectangle of a tab item. SetItemTooltipText Changes the tooltip text of a tab item. SetDragCursors Sets the tab control's drag cursors. ModifyStyle Modifies the tab control's styles. SetControlFont Sets the tab control's current font. GetDefaultFont Retrieves the reference to the default font's LOGFONT structure. Operations InsertItem Inserts a new tab in a tab control. DeleteItem Removes an item from a tab control. DeleteAllItems Removes all items from a tab control. MoveItem Moves a tab item within the current tab control. CopyItem Copies a tab item within the current tab control. HitTest Determines which tab or button, if any, is at a specified screen position. EditLabel Begins in-place editing of an item's text. CCustomTabCtrl::CCustomTabCtrl CCustomTabCtrl( ); Remarks Call this function to construct a CCustomTabCtrlobject. CCustomTabCtrl::Create BOOL Create( D word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); Return value TRUE, if initialization of the object was successful; otherwise FALSE. Parameters , dwStyle: Specifies the tab control's style. Apply any combination of tab control styles to the control. , rect: Specifies the tab control's size and position. It can be either a CRect object or a RECT structure. , pParentWnd: Specifies the tab control's parent window, usually a CDialog. , nID: Specifies the tab control's ID. Remarks In addition to the window styles like WS_CHILD, WS_VISIBLE, the following styles can be applied to a tab control: , CTCS_FIXEDWIDTH: Makes all tabs the same width. , CTCS_FOURBUTTONS: Creates a control with four buttons (First, Prev, Next, Last). , CTCS_AUTOHIDEBUTTONS: Auto hides the buttons. If not specified the buttons remain always on top. , CTCS_TOOLTIPS: The tab control has a ToolTip control associated with it. , CTCS_MULTIHIGHLIGHT: Multiple tabs can be selected by holding down the CTRL key when clicking. , CTCS_EDITLABELS: Allows the item text to be edited in place. , CTCS_DRAGMOVE: Item can be moved by holding the left mouse button down and dragging the cursor over the tab control. , CTCS_DRAGCOPY: Item can be copied by holding down the left mouse button and CTRL key, and dragging the cursor over the tab control. CCustomTabCtrl::GetItemCount int GetItemCount( ) const; Return value Number of items in the tab control. Remarks Call this function to retrieve the number of tabs in the tab control. CCustomTabCtrl::GetCurSel int GetCurSel( ) const; Return value Zero-based index of the selected tab if successful or – 1 if no tab is selected. Remarks Call this function to retrieve the currently selected tab in a tab control. CCustomTabCtrl::SetCurSel int SetCurSel( int nItem ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: The zero-based index of the item to be selected. Remarks Selects a tab in a tab control. A tab control does not send a CTCN_SELCHANGE notification message when a tab is selected using this function. These notifications are sent, using WM_NOTIFY, when the user clicks to change tabs. CCustomTabCtrl::IsItemHighlighted int IsItemHighlighted( int nItem ); Return value 1 if highlighted, 0 if not, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose highlight state is to be retrieved. Remarks Retrieves the highlighted state of a tab item. CCustomTabCtrl::HighlightItem int HighlightItem( int nItem, BOOL fHighlight ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose highlight state is to be set. fHighlight: A highlight state to be set to the item. Remarks This function sets the highlight state to the item. A tab control does not send a CTCN_HIGHLIGHTCHANGE notification message when a tab is highlighted using this function. These notifications are sent, using WM_NOTIFY, when the user clicks to highlight tabs. CCustomTabCtrl::GetItemData int GetItemData( int nItem, DWORD& dwData ) const; Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose data is to be retrieved. dwData: Reference to a DWORD variable that receives the 32-bit application-specific value associated with the specified item. Remarks This function retrieves the 32-bit application-specific value associated with the item specified by nItem. CCustomTabCtrl::SetItemData int SetItemData( int nItem, DWORD dwData ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose data is to be set. dwData: A 32-bit value to be associated with the item. Remarks This function sets the 32-bit application-specific value associated with the item specified by nItem. CCustomTabCtrl::GetItemText int GetItemText( int nItem, CString& sText ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose text is to be retrieved. sText: Reference to a CString object that receives the item's text. Remarks This function retrieves the text of a tab item. CCustomTabCtrl::SetItemText int SetItemText( int nItem, CString sText ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose text is to be set. sText: Pointer to a string object that contains the new item text. Remarks This function changes the text of a tab item. CCustomTabCtrl::GetItemRect int GetItemRect( int nItem, CRect& rect ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item whose rectangle is to be retrieved. rect: Reference to a CRect object that receives the item's rectangle. Remarks This function retrieves the rectangle of a tab item. CCustomTabCtrl::SetItemTooltipText int SetItemTooltipText( int nItem, CString sText ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem - Zero-based index of the tab item whose tooltip text is to be set to one of these values: , CTCID_FIRSTBUTTON: ID of the first button. , CTCID_PREVBUTTON: ID of the previous button. , CTCID_NEXTBUTTON: ID of the next button. , CTCID_LASTBUTTON: ID of the last button. sText: Pointer to a string object that contains the new item tooltip text. Remarks This function changes the tooltip text of a tab item. CCustomTabCtrl::SetDragCursors void SetDragCursors( HCURSOR hCursorMove, HCURSOR hCursorCopy ); Parameters hCursorMove: Handle to the move cursor. hCursorCopy: Handle to the copy cursor. Remarks Call this function to set the tab control's drag cursors. CCustomTabCtrl::ModifyStyle BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags ); Return value TRUE if successful, otherwise FALSE. Remarks For help, see CWnd::ModifyStyle(). Call this function to set the tab control's styles. (Don't use SetWindowLong() to modify CCustomTabCtrl styles.) CCustomTabCtrl::SetControlFont void SetControlFont( LOGFONTt& lf, BOOL fRedraw = FALSE ); Parameters lf: Specifies the new font. fRedraw: If TRUE, redraw the CCustomTabCtrl object. Remarks Sets the tab control's current font to the specified font. CCustomTabCtrl::GetDefaultFont static const LOGFONT& GetDafaultFont(); Return value Reference to the default font's LOGFONT structure. Remarks Retrieves the reference to the default font's LOGFONT structure.. CCustomTabCtrl::InsertItem int InsertItem( int nItem, CString sText, LPARAM lParam = 0 ); Return value Zero-based index of the new tab if successful; otherwise CTCERR_ERRORCODE. Parameters nItem: Zero-based index of the new tab. sText: Pointer to a string object that contains the new item text. lParam: Application-defined data associated with the tab. Remarks Call this function to insert a new tab in an existing tab control. CCustomTabCtrl::DeleteItem int DeleteItem( int nItem ); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem - Zero-based value of the item to be deleted. Remarks Call this function to remove the specified item from a tab control. CCustomTabCtrl::DeleteAllItems void DeleteAllItems( ); Remarks Call this function to remove all items from a tab control. CCustomTabCtrl::MoveItem int MoveItem(int nItemSrc, int nItemDst); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItemSrc: Zero-based index of the source item. nItemDst: Zero-based index of the destination item. Remarks Moves a tab item within the current tab control. A tab control does not send a CTCN_ITEMMOVE notification message when a tab is moved using this function. These notifications are sent, using WM_NOTIFY, when the user uses a mouse to move items. CCustomTabCtrl::CopyItem int CopyItem(int nItemSrc, int nItemDst); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItemSrc: Zero-based index of the source item. nItemDst: Zero-based index of the destination item. Remarks Copies a tab item within the current tab control. A tab control does not send a CTCN_ITEMCOPY notification message when a tab is copied using this function. These notifications are sent, using WM_NOTIFY, when the user uses a mouse to copy items. CCustomTabCtrl::HitTest int HitTest( CPoint pt); Return value The zero based index of the matching item or one of these values: , CTCHT_ONFIRSTBUTTON: The position is over the first button. , CTCHT_ONPREVBUTTON: The position is over the previous button. , CTCHT_ONNEXTBUTTON: The position is over the next button. , CTCHT_ONLASTBUTTON: The position is over the last button. , CTCHT_NOWHERE: The position is inside the tab control's client window, but it is not over either a tab item or a button. Parameters pt: Point to be tested in client coordinates. Remarks Determines which tab or button, if any, is at a specified screen position. CCustomTabCtrl::EditLabel int EditLabel( int nItem); Return value CTCERR_NOERROR if successful, otherwise CTCERR_ERRORCODE. Parameters nItem: Index of the tab item that is to be edited. Remarks Begins in-place editing of an item's text. Notification Messages The following notification codes are supported by the tab control: , CTCN_CLICK: User clicked the left mouse button in the control. , CTCN_RCLICK: User clicked the right mouse button in the control. , CTCN_SELCHANGE: User changed the current selection. , CTCN_HIGHLIGHTCHANGE: User changed the highlight state of the item. , CTCN_ITEMMOVE: User moved the item. , CTCN_ITEMCOPY: User copied the item. , CTCN_LABELUPDATE: User changed the item text. , CTCN_OUTOFMEMORY: Control could not complete an operation because there was not enough memory available. The notifications shown above pass a pointer to the CTC_NMHDR structure that contains an NMHDR structure as its first member which is defined as shown below: Collapse | Copy Code typedef struct _CTC_NMHDR { NMHDR hdr; int nItem; TCHAR pszText[MAX_LABEL_TEXT]; LPARAM lParam; RECT rItem; POINT ptHitTest; BOOL fSelected; BOOL fHighlighted; } CTC_NMHDR; Error codes The following errors can be returned by the tab control functions: , CTCERR_NOERROR: Operation successful. , CTCERR_OUTOFMEMORY: Function call failed because there was not enough memory available. , CTCERR_INDEXOUTOFRANGE: Function call failed because a tab item index was out of range. , CTCERR_NOEDITLABELSTYLE: Function call failed because CTCS_EDITLABELS style was not specified. , CTCERR_NOMULTIHIGHLIGHTSTYLE: Function call failed because CTCS_MULTIHIGHLIGHT style was not specified. , CTCERR_ITEMNOTSELECTED: Function call failed because an item was not selected. , CTCERR_ALREADYINEDITMODE: Function failed because the tab control was already in edit mode. , CTCERR_TEXTTOOLONG: Function failed because an item text was too long. , CTCERR_NOTOOLTIPSSTYLE: Function call failed because CTCS_TOOLTIPS style was not specified. , CTCERR_CREATETOOLTIPFAILED: Function call failed because the creation of tooltip control failed. What's new 16th May, 2006 , Vertical styles (left and right) added: , Remarks: o Label editing is not supported for vertical styles. o I use PlgBlt() for rotating bitmaps. This function is specific to NT and higher, and will not work on Windows95. 16th April, 2006 , Buttons for specifying style added: , Bug fixes: o Fix for RTL. o Fix for incorrect handling of 'OnSize' in the dialog demo application. 25th March, 2006 , A close button and a top style added: , Bug fixes: o Fix for incorrect recalculation of the tooltip rectangles when the tab item is deleted. o Fix for 'Alt-F4 click' when in edit mode. o Fix for incorrect handling of 'OnMouseMove' in the drag and drop mode. 10th Oct, 2005 , SDI and MDI demo projects: 30th Jul, 2004 , "First" and "Last" buttons: , Built-in tooltips for items and buttons: , Multi-highlighted items: , In-place editing: , Drag and drop for moving and coping items. , Auto-repeat buttons when held down. , Auto hide or always on top buttons.
本文档为【用法详解CCustomTabCtrl】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:156KB
软件:Word
页数:23
分类:生活休闲
上传时间:2018-05-01
浏览量:118