CToolBarCtrl

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對象,通常你應該遵循下面的這些步驟:
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::Create:創建一個工具列控制項並將它附加到 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::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 :顯示自定義工具列"對話框。

訊息處理

工具提示通知

當你指定工具條具有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++程式設計師指南”中的“工具提示”。

自定義通知

一個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 包含有關通知訊息的信息的結構。 處理程式不需要返回任何特定值。

相關詞條

熱門詞條

聯絡我們