Tab屬性頁控件可以在一個窗口中添加不同的頁面,然後在頁選擇發生改變時得到通知。MFC中使用CTabCtrl類來封裝屬性頁控件的各種操作。通過調用
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );創建一個窗口,dwStyle中可以使用以下一些屬性頁控件的專用風格:
在控件創建後必需向其中添加頁面才可以使用,添加頁面的函數為:
BOOL InsertItem( int nItem, LPCTSTR lpszItem );nItem為位置,從零開始,lpszItem為頁選擇位置上顯示的文字。如果你希望在頁選擇位置處顯示一個圖標,你可以調用
BOOL InsertItem( int nItem, LPCTSTR lpszItem, int nImage );nImage指明所使用的圖片位置。(在此之前必須調用CImageList * SetImageList( CImageList * pImageList );設置正確的ImageList)
此外CTabCtrl還提供了一些函數用於得到/修改控件的狀態。
int GetCurSel( )/int SetCurSel( int nItem );用於得到/設置當前被選中的頁位置。
BOOL DeleteItem( int nItem )/BOOL DeleteAllItems( );用於刪除指定/所有頁面。
void RemoveImage( int nImage );用於刪除某頁選擇位置上的圖標。
屬性頁控件的消息映射同樣使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode為通知代碼,id為產生該消息的窗口ID,memberFxn為處理函數,函數的原型如同void OnXXXTab(NMHDR* pNMHDR, LRESULT* pResult),其中pNMHDR為一數據結構,在具體使用時需要轉換成其他類型的結構。對於列表控件可能取值和對應的數據結構為:
一般來講在當前頁發生改變時需要隱藏當前的一些子窗口,並顯示其它的子窗口。下面的偽代碼演示了如何使用屬性頁控件:
CParentWnd::OnCreate(...)
{
m_tab.Create(...);
m_tab.InsertItem(0,"Option 1");
m_tab.InsertItem(1,"Option 2");
Create a edit box as the m_tabs Child
Create a static box as the m_tabs Child
edit_box.ShowWindow(SW_SHOW); // edit box在屬性頁的第一頁
static_box.ShowWindow(SW_HIDE); // static box在屬性頁的第二頁
}
void CParentWnd::OnSelectChangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{//處理頁選擇改變後的消息
if(m_tab.GetCurSel()==0)
{//根據當前頁顯示/隱藏不同的子窗口
edit_box.ShowWindow(SW_SHOW);