複製鏈接
請複製以下鏈接發送給好友

CToolBarCtrl

鎖定
CToolBarCtrl類通過MFC的工具條控件的建立,伴隨的創建了CToolBarCtrl的對象,這個控件是基於MFC程序應用框架開發的,建立的控件可以響應很多消息。
中文名
CToolBarCtrl
適用領域
計算機

CToolBarCtrl控件簡介

CToolBarCtrl歷史背景

ctoolbarctrl是CStandardBar的父類CToolBarCtrl的父類的父類,是一個窗口繼承類,在子窗口變動的時候,MFC一定會給窗口發出一些消息,其中包括調用OnChildNotify的消息,能進入到這個接口的消息也很多WM_NOTIFY只是其中一個, 默認情況下,OnChildNotify他只處理正常的界面調整功能,你不重載的話,他就實現 CToolBarCtrl::OnChildNotify(message, wParam, lParam, pLResult); 所實現的程序功能, 而你重載了,他每次到這個消息,先執行你需要的操作,再執行系統操作,也就是重載在運行時被你控制過了。 CToolBarCtrl類提供了Windows工具條通用控件的性能。這個控件(也就是CToolBarCtrl類)只對運行在Windows 95和Windows NT 3.51或更高版本下的程序來説才是可用的。
一個Windows工具條通用控件是一個矩形子窗口,它包含一個或多個按鈕。這些按鈕可以顯示一個位圖圖像,一個字符串,或兩者都有。當用户選擇一個按鈕時,它向該工具條的屬主窗口發送一條命令消息。通常,工具條中的按鈕對應於應用程序的菜單中的項;這些按鈕為用户訪問一個應用程序的命令提供了更為直接的方法。
CToolBarCtrl對象包含幾個重要的內部數據結構:一個按鈕圖像列表或一個圖像列表,一個按鈕標籤字符串列表和一個TBBUTTON結構的列表,該結構使一個圖像和/或字符串與按鈕的位置,風格,主題和命令ID相關聯。這些數據結構的每一個都由一個從零開始的索引來引用。在你可以使用一個CToolBarCtrl對象之前,你必須設置這些數據結構。字符串列表只能被用作按鈕標籤;不能從按鈕中檢取字符串。

CToolBarCtrl使用步驟

要使用一個CToolBarCtrl對象,通常你應該遵循下面的這些步驟:
1. 構造該CToolBarCtrl對象。
2. 調用Create來創建Windows工具條通用控件並將它與該CToolBarCtrl對象連接。通過使用風格來指定工具條的風格,如對一個透明的工具條使用TBSTYLE_ TRANSPARENT,或對一個支持風格按鈕的工具條使用TBSTYLE_DROPDOWN。
3. 指明你希望按鈕在工具條上如何顯示:
給按鈕使用位圖圖像,通過調用AddBitmap將按鈕位圖添加到工具條中。
給按鈕使用來自一個圖像列表的圖像,通過調用SetImageList,SetHotImageList,或SetDisabledImageList來指定圖像列表。
給按鈕使用字符串標籤,通過調用AddString和/或AddStrings來將字符串添加到工具條中。
4. 通過調用AddButtons將按鈕結構添加到工具條中。
5. 如果你希望在一個不是CFrameWnd的屬主窗口中的工具條具有工具提示,則你必須在工具條的屬主窗口中處理TTN_NEEDTEXT消息,就像在CToolBarCtrl處理工具提示通知中描述的一樣。如果工具條的父窗口是由CFrameWnd派生而來的,則你不用作任何額外的努力就可以顯示工具提示,因為CFrameWnd提供了一個缺省的處理函數。
6. 如果你希望能夠讓用户定製工具條,則在屬主窗口中處理定製通知消息,就像在CToolBarCtrl:處理定製通知中描述的一樣。
你可以使用SaveState來將一個工具條控件的當前狀態保存在註冊表中,用RestoreState來根據註冊表中先前保存的信息恢復工具條的狀態。除了在應用程序的使用之間保存工具條的狀態,通常在用户開始定製該工具條之前應用程序會保存工具條的狀態,以防用户後來想將工具條恢復到它的最初的狀態。
為Internet Explorer 4.0或更新版提供的支持
要支持在Internet Explorer 4.0或更新版之後引入的性能,MFC提供了圖像列表支持,為工具條提供了透明和平坦風格。
一個透明的工具條允許在工具條下的客户被透過工具條顯示出來。要創建一個透明的工具條,要同時使用TBSTYLE_FLAT和TBSTYLE_TRANSPARENT風格。透明的工具條具有熱點跟蹤的特色;就是説,當鼠標指針移動到工具條的一個熱點按鈕上時,按鈕的外觀改變。只用TBSTYLE_FLAT風格創建的工具條將包含不透明的按鈕。
圖像列表支持使控件的缺省行為具有更大的靈活性,並支持熱點圖像和無效的圖像。對透明的工具條使用GetImageList,GetHotImageList和GetDisabledImageList可以根據它的狀態來操縱圖像。
有關使用CToolBarCtrl的更多信息,參見“Visual C++程序員指南”中的“控件主題”和“使用CToolBarCtrl”。
#include <afxcmn.h>
請參閲:CToolBar

CToolBarCtrl成員

CToolBarCtrl構造

CToolBarCtrl::CToolBarCtrl:構造一個CToolBarCtrl 對象
CToolBarCtrl::Create:創建一個工具欄控件並將它附加到 CToolBarCtrl 對象。

CToolBarCtrl屬性

CToolBarCtrl::IsButtonChecked:指示在工具欄控件的指定的按鈕是否已選中。
CToolBarCtrl::IsButtonEnabled :指示在工具欄控件的指定的按鈕是否啓用。
CToolBarCtrl::IsButtonHidden :指示在工具欄控件的指定的按鈕是否為隱藏的。
CToolBarCtrl::IsButtonHighlighted :檢查工具欄按鈕的突出顯示狀態。
CToolBarCtrl::IsButtonIndeterminate :通知指定的按鈕的狀態在工具欄控件是否是不確定的(灰色)。
CToolBarCtrl::IsButtonPressed :指示在工具欄控件的指定的按鈕是否按。
CToolBarCtrl::SetState:設置指定的按鈕的狀態在工具欄控件。
CToolBarCtrl::GetState :檢索有關指定的按鈕的狀態信息在一個工具欄控件,例如是否已啓用,按下或簽出。
CToolBarCtrl::GetButton :檢索有關指定的按鈕的信息在工具欄控件。
CToolBarCtrl::GetButtonCount :當前檢索按鈕的計數在工具欄控件
CToolBarCtrl::GetItemRect:檢索一個按鈕的邊框在工具欄控件的。
CToolBarCtrl::GetRect :檢索一個指定的工具欄按鈕的邊框。
CToolBarCtrl::SetButtonStructSize :指定 TBBUTTON 結構的大小。
CToolBarCtrl::GetButtonSize :檢索當前寬度和高度工具欄按鈕,以像素為單位。
CToolBarCtrl::GetButtonSize:檢索當前寬度和高度工具欄按鈕,以像素為單位。
CToolBarCtrl::SetButtonSize:設置要添加的按鈕的大小到工具欄控件。
CToolBarCtrl::SetBitmapSize:設置要添加的數字複製圖像的大小到工具欄控件。
CToolBarCtrl::GetToolTips:檢索工具提示控件的句柄,如果有,與工具欄控件。
CToolBarCtrl::SetToolTips :關聯工具提示控件與工具欄控件。
CToolBarCtrl::SetOwner :設置窗口接收從工具欄控件的通知消息。
CToolBarCtrl::SetRows :設置要在工具欄上顯示的按鈕。
CToolBarCtrl::GetRows:檢索行數工具欄當前顯示的按鈕。
CToolBarCtrl::SetCmdID:指定的按鈕時,設置要發送的命令ID給所有者窗口。
CToolBarCtrl::GetBitmapFlags :獲取標誌與工具欄的位圖。
CToolBarCtrl::GetDisabledImageList :檢索圖像列表工具欄控件使用顯示禁用的按鈕。
CToolBarCtrl::GetHotImageList:檢索圖像列表工具欄控件使用顯示“快捷”按鈕。 當鼠標指針懸停在上時,一個快捷按鈕突出顯示。
CToolBarCtrl::GetImageList:檢索圖像列表工具欄控件使用顯示在其默認狀態的按鈕。
CToolBarCtrl::GetStyle :檢索樣式將用於工具欄控件。
CToolBarCtrl::GetMaxTextRows:檢索文本行的最大數在工具欄按鈕公開的。
CToolBarCtrl::SetButtonWidth:設置在工具欄控件的最小值和最大值按鈕寬度。
CToolBarCtrl::SetDisabledImageList:設置圖像列表工具欄控件將使用顯示禁用的按鈕。
CToolBarCtrl::SetHotImageList:設置圖像列表工具欄控件將使用顯示“快捷”按鈕。
CToolBarCtrl::SetImageList:設置圖像列表工具欄將使用顯示其默認狀態的按鈕。
CToolBarCtrl::GetDropTarget:檢索工具欄控件的 IDropTarget 接口。
CToolBarCtrl::SetIndent :將第一個按鈕的縮進在工具欄控件。
CToolBarCtrl::SetMaxTextRows :設置文本行的最大數在工具欄按鈕公開的。
CToolBarCtrl::SetStyle:設置工具欄控件的樣式。
CToolBarCtrl::GetAnchorHighlight:檢索設置為工具欄的定位點突出顯示。
CToolBarCtrl::SetAnchorHighlight:設置為工具欄的定位點突出顯示。
CToolBarCtrl::GetHotItem :檢索快捷項的索引工具欄上的。
CToolBarCtrl::SetHotItem :設置工具欄上的快捷項目。
CToolBarCtrl::GetInsertMark:檢索工具欄的當前插入標記。
CToolBarCtrl::SetInsertMark :設置工具欄按鈕的當前插入標記。
CToolBarCtrl::GetMaxSize:檢索所有的總大小可見按鈕和分隔符在工具欄。
CToolBarCtrl::InsertMarkHitTest:檢索點插入標記信息在工具欄。
CToolBarCtrl::GetExtendedStyle :檢索工具欄控件的擴展樣式。
CToolBarCtrl::SetExtendedStyle :設置工具欄控件的擴展樣式。
CToolBarCtrl::GetInsertMarkColor:檢索使用的顏色繪製工具欄中插入標記。
CToolBarCtrl::SetInsertMarkColor :設置用於的顏色繪製工具欄中插入標記。
CToolBarCtrl::MapAccelerator:映射快捷鍵字符為工具欄按鈕。
CToolBarCtrl::MoveButton :從索引按鈕移動到另一個。
CToolBarCtrl::HitTest :確定一個點位置。工具欄控件。

CToolBarCtrl操作

CToolBarCtrl::EnableButton:啓用或禁用了toolbar控件的指定的按鈕。
CToolBarCtrl::CheckButton:選中或清除在工具欄控件的特定按鈕。
CToolBarCtrl::GetButtonInfo :檢索一個按鈕的信息在工具欄。
CToolBarCtrl::SetButtonInfo:將現有按鈕的信息在工具欄。
CToolBarCtrl::PressButton :按或版本在工具欄控件的指定的按鈕。
CToolBarCtrl::SetDrawTextFlags :將Win32函數 DrawText,的標誌用於繪製在指定的矩形的文本,已設置基於標誌如何設置。
CToolBarCtrl::HideButton :隱藏或顯示在工具欄控件的指定的按鈕。
CToolBarCtrl::Indeterminate:設置或清除指定的按鈕不確定的(灰色)狀態在工具欄控件的。
CToolBarCtrl::AddBitmap:添加一個或多個位圖按鈕圖像到按鈕圖像列表可用於工具欄控件。
CToolBarCtrl::AddButtons :添加一個或多個按鈕添加到工具欄控件。
CToolBarCtrl::DeleteButton:從控件中刪除工具欄按鈕。
CToolBarCtrl::InsertButton :插入工具欄中的按鈕控件。
CToolBarCtrl::CommandToIndex :檢索按鈕的從零開始的索引與指定的順序標識符。
CToolBarCtrl::RestoreState :還原工具欄控件的狀態。
CToolBarCtrl::MarkButton :設置特定按鈕的突出顯示狀態。工具欄控件的。
CToolBarCtrl::LoadImages :加載位圖到工具欄控件的圖像中列出。
CToolBarCtrl::SaveState:保存工具欄控件的狀態。
CToolBarCtrl::AddString:添加一個新字符串,作為資源ID,為內部的工具欄上的列表的字符串。
CToolBarCtrl::AddStrings :加一個新字符串,通過,為Null分隔的字符串緩衝區的指針,對內部的工具欄上的列表的字符串。
CToolBarCtrl::AutoSize :調整工具欄控件。
CToolBarCtrl::Customize :顯示自定義工具欄"對話框。

CToolBarCtrl消息處理

CToolBarCtrl工具提示通知

當你指定工具條具有TBSTYLE_TOOLTIPS風格時,該工具條創建並管理一個工具提示控件。一個工具提示是一個小的彈出窗口,該窗口包含了一行用於描述一個工具條按鈕的文本。通常該工具提示是被隱藏的,只有當用户將光標放在一個工具條按鈕上並停留大概半秒時間時它才顯示出來。工具提示顯示在光標的附近。
在工具提示被顯示之前,TTN_NEEDTEXT通知消息被髮送給該工具條的屬主窗口,以獲取對應於該按鈕的描述文本。如果該工具條的屬主窗口是一個CFrameWnd窗口,則不需要任何額外的工作就會顯示工具提示,因為CFrameWnd有一個缺省的TTN_NEEDTEXT通知處理函數。如果該工具條的屬主窗口不是由CFrameWnd派生而來的,比如是一個對話框或格式視,則你必須在你的屬主窗口的消息映射中添加一項,並在消息映射中提供一個通知處理函數。下面就是要被添加到你的屬主窗口的消息映射:
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, memberFxn )
memberFxn 當這個按鈕的文本需要顯示時將被調用的成員函數。
注意,一個工具提示的id總是0。
除了TTN_NEEDTEXT通知,一個工具提示控件可以向一個工具條控件發送下列通知:通知消息含義
TTN_NEEDTEXTA:工具提示控件需要 ASCII 文本 (僅限 Windows 95)。
TTN_NEEDTEXTW:工具提示控件需要 UNICODE 文本 (僅限 Windows NT)。
TBN_HOTITEMCHANGE:指示快捷 (顯示的) 項目已更改。
NM_RCLICK :指示用户使用了鼠標右鍵單擊按鈕。
TBN_DRAGOUT:指示用户單擊按鈕並拖動的指針按鈕。 它允許應用程序實現從工具欄按鈕的拖放。 在收到此通知時,應用程序將啓動拖放操作。
TBN_DROPDOWN:指示用户單擊以使用 TBSTYLE_DROPDOWN 樣式的按鈕。
TBN_GETOBJECT :指示用户移動了在使用 TBSTYLE_DROPPABLE 樣式的按鈕的指針。
處理函數的例子和有關使能工具提示的更多信息,參見“Visual C++程序員指南”中的“工具提示”。

CToolBarCtrl自定義通知

一個Windows工具條通用控件具有內在的定製特徵,包括一個系統定義的定製對話框,用來讓用户插入、刪除,或重新安排工具條按鈕。應用程序決定定製是否有效,並控制用户對該工具條定製的限度。
你可以通過給予工具條CCS_ADJUSTABLE風格來使這些定製特徵對於用户來説是可用的。此定製特徵允許用户將一個按鈕拖動到一個新的位置,或通過拖動按鈕離開工具條來刪除這個按鈕。另外,用户可以雙擊工具條來顯示Customize Toolbar對話框,讓用户添加、刪除,或重新安排工具條按鈕。應用程序可以通過使用Custoimize成員函數來顯示對話框。
在定製過程中的每一步,工具條控件都向父窗口發送通知消息。如果用户按住SHIFT鍵並開始拖動一個按鈕,則工具條自動處理這個拖動操作。工具條發送TBN_QUERYDELETE通知消息給父窗口,以確定是否應該刪除該按鈕。如果父窗口返回FALSE,則這個拖動操作結束。否則,工具條捕捉鼠標輸入並等待用户釋放鼠標按鈕。
當用户釋放鼠標按鈕時,工具條控件確定鼠標光標所在的位置。如果該光標的位置是在工具條之外,則按鈕被刪除。如果光標位於另一個工具條按鈕上,則工具條向其父窗口發送TBN_QUERYINSERT通知消息,以確定是否要將一個按鈕插入在給定按鈕的左邊。如果父窗口返回TRUE,則該按鈕被插入;否則,不插入。工具條發送TBN_TOOLBARCHANGE通知來表示拖動操作結束。
如果用户在沒有按下SHIFT鍵的情況下開始一次拖動操作,則工具條控件發送TBN_BEGINDRAG通知消息給屬主窗口。一個實現了自己的按鈕拖動代碼的應用程序可以使用這個消息作為開始一次拖動操作的信號。工具條發送TBN_ENDDRAG通知消息來表示拖動操作結束。
當用户通過使用Customize Toolbar對話框來定製一個工具條時,該工具條控件發送通知消息。在用户雙擊工具條之後,但在對話框被創建之前,該工具條發送TBN_BEGINADJUST通知消息。然後,工具條開始發送一系列TBN_QUERYINSERT消息,以確定該工具條是否允許插入按鈕。當父窗口返回TRUE時,該工具條停止發送TBN_QUERYINSERT通知消息。如果父窗口沒有對任何按鈕返回TRUE,則工具條銷燬該對話框。
接着,工具條控件通過為工具條中的每一個按鈕發送一個TBN_QUERYDELETE通知消息來確定是否可以從工具條中刪除某個按鈕。父窗口返回TRUE則表示可以刪除該按鈕;否則,父窗口返回FALSE。工具條將所有的按鈕都添加到對話框中,但是將那些不能刪除的按鈕變灰。
不管什麼時候,當工具條控件需要有關Customize Toolbar對話框中的某個控件的信息時,它就發送TBN_GETBUTTONINFO通知信息,並指定它想獲取其信息的按鈕的索引,以及一個TBNOTIFY結構的地址。父窗口必須用相關的信息填充該結構。
Customize Toolbar對話框還包括一個Help按鈕和一個Reset按鈕。當用户選擇Help按鈕時,工具條控件發送TBN_CUSTHELP通知消息。父窗口應該通過顯示幫助信息來作出響應。當用户選擇Reset按鈕時,對話框發送TBN_RESET消息。這個消息表示工具條要再次初始化這個對話框。
這些消息都是WM_NOTIFY消息,通過向你的屬主窗口的消息映射中添加下列形式的消息映射項,你可以在你的屬主窗口中處理它們。
ON_NOTIFY(wNotifyCode, idControl,memberFxn)
wNotifyCode 通知消息標識符代碼,例如 TBN_BEGINADJUST。
idControl 發送通知的控件的標識符。
memberFxn 將調用成員函數,當此接收通知。
您的成員函數是聲明一個具有以下原型:
afx_msg void memberFxn( NMHDR* pNotifyStruct, LRESULT* result );
如果通知消息的處理函數返回一個值,則處理函數應該將這個值存放在由result指向的LRESULT中。
對每一個消息,pNotifyStruct指向一個NMHDR結構或一個TBNOTIFY結構。
這些結構被描述如下:NMHDR結構包含了下列成員:
typedef struct tagNMHDR
{
HWND hwndFrom; // 發送消息的控件的句柄
UINT idFrom; // 發送消息的控件的標識符
UINT code; // 通知代碼,參見下面
} NMHDR;
備註:
hwndFrom 發送通知控件的窗口句柄。 若要將此處理為 CWnd 指針,請使用 CWnd::FromHandle。
idFrom 發送通知的控件的標識符。
code 通知代碼。
此成員可為值特定於某個控件類型,如 TBN_BEGINADJUST 或 TTN_NEEDTEXT,也可以是下面所列的一個常見通知值:
NM_CLICK:用户單擊控件內的鼠標左鍵。
NM_DBLCLK: 用户雙擊了在控件內鼠標左鍵。
NM_KILLFOCUS: 控件失去輸入焦點。
,因為不可用,足夠的內存NM_OUTOFMEMORY 控件無法完成操作。
NM_RCLICK: 用户單擊控件內的鼠標右鍵。
NM_RDBLCLK: 用户雙擊了在控件內鼠標右鍵。
NM_RETURN:控件具有輸入焦點,因此,用户按下了 enter 鍵。
NM_SETFOCUS: 控件接收輸入焦點。
TBNOTIFY 結構包含以下成員:
typedef struct {
NMHDR hdr; // information common to all WM_NOTIFY messages
int iItem; // index of button associated with notification
TBBUTTON tbButton; // info about button associated withnotification
int cchText; // count of characters in button text
LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
備註
hdr 信息共有的所有 WM_NOTIFY 消息。
iItem 按鈕索引與通知。
tbButton 包含 有關工具欄按鈕的信息的TBBUTTON 結構與該通知。
cchText 計數在按鈕文本的字符。
lpszText 按文本的指針。
工具條發送下列信息:
TBN_BEGINADJUST
發送到用户啓動時自定義工具欄控件。 指針指向 NMHDR 包含有關該通知的信息的結構。 處理程序不需要返回任何特定值。
TBN_BEGINDRAG
發送到用户開始拖動到工具欄控件的按鈕。 指針指向 TBNOTIFY 結構。 iItem 成員包含所拖動的按鈕的從零開始的索引。 處理程序不需要返回任何特定值。
TBN_CUSTHELP
發送到用户何時選擇在自定義工具欄 " 對話框的 " 幫助 " 按鈕。 不返回值。 指針指向 NMHDR 包含有關通知消息的信息的結構。 處理程序不需要返回任何特定值。
TBN_ENDADJUST
發送到用户何時停止自定義工具欄控件。 指針指向 NMHDR 包含有關通知消息的信息的結構。 處理程序不需要返回任何特定值。
TBN_ENDDRAG
發送到用户何時停止拖動到工具欄控件的按鈕。 指針指向 TBNOTIFY 結構。 iItem 成員包含所拖動的按鈕的從零開始的索引。 處理程序不需要返回任何特定值。
TBN_GETBUTTONINFO
發送到用户在自定義一個工具欄控件。 工具欄使用此通知消息檢索自定義工具欄 " 對話框需要的信息。 指針指向 TBNOTIFY 結構。 iItem 成員指定按鈕的從零開始的索引。 pszText 和 cchText 成員在字符指定該地址和長度,,當前按鈕文本。 應用程序應當由有關按鈕的信息加載機制。 返回否則 TRUE ,如果按鈕信息複製到了結構,或 FALSE 。
TBN_QUERYDELETE
發送時,用户自定義工具欄按鈕時確定是否可以從工具欄控件被刪除。 指針指向 TBNOTIFY 結構。 iItem 成員包含要刪除的按鈕的從零開始的索引。 返回 TRUE 允許按鈕刪除或 FALSE 防止按鈕被刪除。
TBN_QUERYINSERT
發送時,用户自定義一個工具欄控件時確定按鈕是否可以在特定按鈕左側插入。 指針指向 TBNOTIFY 結構。 iItem 成員包含要插入的按鈕的從零開始的索引。 返回 TRUE 允許按鈕在特定按鈕或 FALSE 前面插入防止按鈕插入。
,當用户重置自定義工具欄 " 對話框的內容時,TBN_RESET 發送的。 指針指向 NMHDR 包含有關通知消息的信息的結構。 處理程序不需要返回任何特定值。
,在用户自定義一個工具欄控件之後,TBN_TOOLBARCHANGE 發送的。 指針指向 NMHDR 包含有關通知消息的信息的結構。 處理程序不需要返回任何特定值。 [1-3] 
參考資料