文檔金喜正規買球>>BCGControlBar 中文文檔>>如何在工具欄上放置控件
如何在工具欄上放置控件
立即下載BCGControlBar Professional Edition for MFC
本文解釋了如何在工具欄上放置各種控件,如組合框或編輯框。
例如,您想要創建一個“查找”組合框,它出現在工具欄上并包含最近使用的搜索字符串。用戶將能夠在組合框編輯控件中鍵入字符串,然后按 Enter 鍵搜索文檔或按退出鍵將焦點返回到主框架,該文檔顯示在CEditView 派生視圖中。
以下步驟是“設置”工作,涉及組合框按鈕的創建及其命令的處理:
- 打開應用程序資源,將具有ID_EDIT_FIND命令ID的新按鈕添加到所需的工具欄(IDR_MAINFRAME),并創建具有相同ID的新菜單項。添加一個新的字符串“查找文本\nFind”與ID_EDIT_FIND_COMBO命令ID的字符串表,此ID將用作查找組合框按鈕的命令ID。請注意,ID_EDIT_FIND是CEditView處理的標準命令,因此不需要為該命令實現特殊的處理程序,但是需要為ID_EDIT_FIND_COMBO命令實現處理程序。
- 從CBCGPComboBox類派生一個類,命名為CFindComboBox。
- 在CFindComboBox類中覆蓋PreTranslateMessage虛擬成員函數,這將允許您首先處理WM_KEYDOWN消息并采取適當的操作。當用戶按下escape鍵(VK_ESCAPE)時,將焦點返回到主框架窗口,當用戶點擊回車鍵(VK_ENTER)時,將帶有ID_EDIT_FIND_COMBO命令ID的WM_COMMAND消息發送到主框架窗口(該命令將被路由到視圖)。
- 從CBCGPToolbarComboBoxButton類派生一個類,命名為CFindComboButton。
- CBCGPToolbarComboBoxButton的構造函數接受三個參數:按鈕的命令ID、按鈕圖像的索引和組合框樣式。您應該傳遞ID_EDIT_FIND_COMBO作為命令ID,您可以使用CImageHash::GetImageOfCommand與ID_EDIT_FIND一起獲得圖像索引。
- 覆蓋CBCGPToolbarComboBoxButton::CreateCombo成員函數,在這里,您應該創建CFindComboBox對象并返回指向它的指針。
- 使用IMPLEMENT_SERIAL宏使組合按鈕持久,工作區管理器自動從Windows注冊表加載并保存按鈕的狀態。
- 在視圖中實現ID_EDIT_FIND_COMBO處理程序。使用CBCGPToolBar::GetCommandButtons與ID_EDIT_FIND_COMBO ID檢索所有find組合框按鈕。由于自定義,它可以是具有相同命令ID的組合框按鈕的多個副本。
- 使用CBCGPToolBar::IsLastCommandFromButton來確定“查找”命令是否從組合框按鈕發送,如果是,則查找文本并將搜索字符串添加到組合框中。
您應該執行以下步驟將查找組合框按鈕放到工具欄中:
- 在主框架窗口中實現BCGM_RESETTOOLBAR消息處理器(OnToolbarReset),請注意,當工具欄被初始化(在應用程序啟動時)或工具欄在自定義期間被重置時,框架將此消息發送到主框架窗口。無論哪種情況,您都需要用“自定義”查找組合框按鈕替換標準工具欄按鈕。
- 在OnToolbarReset處理程序中分析工具欄的ID(它是BCGM_RESETTOOLBAR消息的WPARAM)。當您遇到IDR_MAINFRAME工具欄時,只需使用ID_EDIT_FIND和對CFindComboButton對象的引用調用CBCGPToolBar::ReplaceButton。請注意。您可以在堆棧上構造一個CFindComboButton對象,因為replacebutton復制按鈕對象并維護該副本。
- 如果您啟用定制,您實現“定制”處理程序(OnViewCustomize)并創建CBCGPToolbarCustomize對話框。你必須用ID_EDIT_FIND和CFindComboButton對象的引用來調用CBCGPToolbarCustomize::ReplaceButton。請注意。自定義對話框包含“Commands”頁面和“Commands”列表框。用戶可以將命令拖放到工具欄上。默認情況下,自定義對話框處理應用程序菜單,并為每個類別構建標準工具欄按鈕列表。如果不在需要時用CBCGPToolbarButton派生的按鈕替換標準工具欄按鈕,則將失去派生對象提供的擴展功能。