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