轉自:http://www.jizhuomi.com/software/205.html
前面兩節講了樹形控件Tree Control,本節開始講解標簽控件Tab Control,也可以稱為選項卡控件。
標簽控件簡介
標簽控件也比較常見。它可以把多個頁面集成到一個窗口中,每個頁面對應一個標簽,用戶點擊某個標簽時,它對應的頁面就會顯示。下圖是Windows系統配置中標簽控件的例子:
使用標簽控件我們可以同時加載多個有關聯的頁面,用戶只需點擊標簽即可實現頁面切換,方便靈活的進行操作。每個標簽除了可以顯示標簽文本,還可以顯示圖標。
標簽控件相當於是一個頁面的容器,可以容納多個對話框,而且一般也只容納對話框,所以我們不能直接在標簽控件上添加其他控件,必須先將其他控件放到對話框中,再將對話框添加到標簽控件中。最終我們點擊標簽切換頁面時,切換的不是控件的組合,而是對話框。
標簽控件的通知消息
在對標簽控件進行一些操作,比如點擊標簽時,標簽控件也會向父窗口發送一些通知消息。我們可以為這些通知消息添加處理函數,實現各種功能。標簽控件的主要通知消息及含義如下所示:
TCN_SELCHANGE:通知父窗口控件的標簽選擇項已經改變
TCN_SELCHANGING 通知父窗口控件的標簽選擇項正在改變
TCN_KEYDOWN:通知父窗口在控件范圍內鍵盤被按下
TCN_GETOBJECT:具有TCS_EX_REGISTERDROP擴展特性並且對象被拖動時的通知消息
TCN_FOCUSCHANGE:通知父窗口控件的按鈕聚焦已經改變
NM_CLICK:通知父窗口用戶在控件區域范圍內點擊了鼠標左鍵
NM_RCLICK:通知父窗口用戶在控件區域范圍內點擊了鼠標右鍵
NM_RELEASEDCAPTURE:通知父窗口在控件區域范圍內釋放鼠標捕獲消息
標簽控件的相關結構體
標簽控件在使用中也有一些相關的結構體經常用到,主要以下幾個:
1. TCITEMHEADER結構體
該結構體用來指定或獲取標簽控件本身的屬性。用在TCM_INSERTITEM、TCM_GETITEM和TCM_SETITEM消息中。
typedef struct tagTCITEMHEADER { UINT mask; // 掩碼,可以為TCIF_IMAGE(iImage成員有效)、TCIF_RTLREADING、TCIF_TEXT(pszText成員有效)
UINT lpReserved1; // 預留
UINT lpReserved2; // 預留
LPTSTR pszText; // 標簽文本字符串
int cchTextMax; int iImage; // 圖標在標簽控件圖像序列中的索引
} TCITEMHEADER, *LPTCITEMHEADER;
2. TCITEM結構體
該結構體用來指定或獲取標簽頁的屬性。用在TCM_INSERTITEM、TCM_GETITEM和TCM_SETITEM消息中。
typedef struct tagTCITEM { UINT mask; // 掩碼,可以是TCIF_IMAGE(iImage成員有效)、TCIF_PARAM(lParam成員有效)、TCIF_RTLREADING、TCIF_STATE、TCIF_TEXT(pszText成員有效)
#if (_WIN32_IE >= 0x0300) DWORD dwState; DWORD dwStateMask; #else UINT lpReserved1; UINT lpReserved2; #endif LPTSTR pszText; int cchTextMax; int iImage; LPARAM lParam; // 與標簽頁關聯的32位數據
} TCITEM, *LPTCITEM;
3. TCHITTESTINFO結構體
該結構體包含了鼠標單擊測試的信息。
typedef struct tagTCHITTESTINFO { POINT pt; // 鼠標點擊測試的客戶區坐標
UINT flags; // 接收點擊測試的結果。有以下幾種:TCHT_NOWHERE(坐標點不在標簽上)、TCHT_ONITEM(坐標點在標簽上但不在標簽文本或圖標上)、TCHT_ONITEMICON(坐標點在標簽圖標上)、TCHT_ONITEMLABEL(坐標點在標簽文本上)
} TCHITTESTINFO, *LPTCHITTESTINFO;
4. NMTCKEYDOWN結構體
該結構體包含了標簽控件中鍵盤按下的相關信息。主要用在TCN_KEYDOWN通知消息中。
typedef struct tagNMTCKEYDOWN { NMHDR hdr; WORD wVKey; UINT flags; } NMTCKEYDOWN;
標簽控件的上半部分就講到這里了,下節將繼續講解標簽控件的知識和應用實例。