【MFC】工具栏按钮的热点效果
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發(fā)環(huán)境
- 03. 關鍵技術
- 04. 程序設計
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
工具欄按鈕的熱點效果可以通過CreateEx方法來實現(xiàn),在調(diào)用該方法創(chuàng)建工具欄之前還要創(chuàng)建兩個圖像列表,并為工具欄按鈕和熱點效果時的按鈕關聯(lián)不同圖像列表的圖像。效果如下圖所示。
某個按鈕被選中,其圖標會改變。
02. 開發(fā)環(huán)境
系統(tǒng)環(huán)境:Windows 10
開發(fā)環(huán)境:Visual Studio 2019
03. 關鍵技術
實例需要使用兩個圖像列表,兩個圖像列表通過差異變化可以看出按鈕的熱點效果,在程序中創(chuàng)建兩個列表,然后通過CToolBar類的SetImageList方法來設置顯示按鈕圖標的圖像列表,使用SetHotImageList方法來設置產(chǎn)生熱點效果的圖像列表。
04. 程序設計
(1)創(chuàng)建基于對話框的應用程序。
(2)向工程中添加多個圖標資源,ID屬性分別從IDI_ICON1到IDI_ICON16。
(3)在CHotToolDlg類中定義一個CToolBarCtrl對象和兩個CImageList對象。
private:CToolBar m_ToolBar;CImageList m_ImageList;CImageList m_HotImageList; BOOL CMy4ToolButtonDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統(tǒng)菜單中。// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設置大圖標SetIcon(m_hIcon, FALSE); // 設置小圖標// TODO: 在此添加額外的初始化代碼//創(chuàng)建用來顯示的圖像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//創(chuàng)建用來顯示熱點效果的圖像列表m_HotImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//向圖像列表中添加圖標m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON3));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON5));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON7));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON9));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON11));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON13));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON15));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON2));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON4));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON6));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON8));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON10));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON12));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON14));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON16));UINT array[10];for (int i = 0; i < 9; i++){if (3 == i || 7 == i){//第4個 8個按鈕為分隔條array[i] = ID_SEPARATOR;}else{array[i] = i * 2 + IDI_ICON1;}}m_ToolBar.CreateEx(this, TBSTYLE_FLAT);m_ToolBar.SetButtons(array, 10);//m_ToolBar.SetButtonText(0, TEXT("新建"));//m_ToolBar.SetButtonText(1, TEXT("打開"));//m_ToolBar.SetButtonText(2, TEXT("保存"));//m_ToolBar.SetButtonText(4, TEXT("剪切"));//m_ToolBar.SetButtonText(5, TEXT("復制"));//m_ToolBar.SetButtonText(6, TEXT("粘貼"));//m_ToolBar.SetButtonText(8, TEXT("打印"));//m_ToolBar.SetButtonText(9, TEXT("幫助"));//關聯(lián)圖像列表m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);m_ToolBar.GetToolBarCtrl().SetHotImageList(&m_HotImageList);//設置按鈕和圖標的大小m_ToolBar.SetSizes(CSize(40, 40), CSize(32, 32));//顯示工具欄RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);return TRUE; // 除非將焦點設置到控件,否則返回 TRUE }05. 秘笈心法
熱點效果的實現(xiàn)方法
實例使用了CToolBar類的SetHotImageList方法來實現(xiàn)熱點效果,也可以通過處理鼠標移動消息(WM_MOUSEMOVE)來實現(xiàn)該效果,當鼠標移動到按鈕上時,就使用SetButtonInfo來刷新圖像,當然在鼠標移動前應當先記錄工具欄按鈕的區(qū)域信息。
06. 源碼下載
下載:【MFC】工具欄按鈕的熱點效果.rar
07. 附錄
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【MFC】工具栏按钮的热点效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】根据菜单创建工具栏
- 下一篇: 【MFC】定义XP风格的工具栏