【MFC】工具栏按钮的热点效果
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發(fā)環(huán)境
- 03. 關(guān)鍵技術(shù)
- 04. 程序設(shè)計(jì)
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
工具欄按鈕的熱點(diǎn)效果可以通過(guò)CreateEx方法來(lái)實(shí)現(xiàn),在調(diào)用該方法創(chuàng)建工具欄之前還要?jiǎng)?chuàng)建兩個(gè)圖像列表,并為工具欄按鈕和熱點(diǎn)效果時(shí)的按鈕關(guān)聯(lián)不同圖像列表的圖像。效果如下圖所示。
某個(gè)按鈕被選中,其圖標(biāo)會(huì)改變。
02. 開發(fā)環(huán)境
系統(tǒng)環(huán)境:Windows 10
開發(fā)環(huán)境:Visual Studio 2019
03. 關(guān)鍵技術(shù)
實(shí)例需要使用兩個(gè)圖像列表,兩個(gè)圖像列表通過(guò)差異變化可以看出按鈕的熱點(diǎn)效果,在程序中創(chuàng)建兩個(gè)列表,然后通過(guò)CToolBar類的SetImageList方法來(lái)設(shè)置顯示按鈕圖標(biāo)的圖像列表,使用SetHotImageList方法來(lái)設(shè)置產(chǎn)生熱點(diǎn)效果的圖像列表。
04. 程序設(shè)計(jì)
(1)創(chuàng)建基于對(duì)話框的應(yīng)用程序。
(2)向工程中添加多個(gè)圖標(biāo)資源,ID屬性分別從IDI_ICON1到IDI_ICON16。
(3)在CHotToolDlg類中定義一個(gè)CToolBarCtrl對(duì)象和兩個(gè)CImageList對(duì)象。
private:CToolBar m_ToolBar;CImageList m_ImageList;CImageList m_HotImageList; BOOL CMy4ToolButtonDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關(guān)于...”菜單項(xiàng)添加到系統(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);}}// 設(shè)置此對(duì)話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)// TODO: 在此添加額外的初始化代碼//創(chuàng)建用來(lái)顯示的圖像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//創(chuàng)建用來(lái)顯示熱點(diǎn)效果的圖像列表m_HotImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//向圖像列表中添加圖標(biāo)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個(gè) 8個(gè)按鈕為分隔條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("復(fù)制"));//m_ToolBar.SetButtonText(6, TEXT("粘貼"));//m_ToolBar.SetButtonText(8, TEXT("打印"));//m_ToolBar.SetButtonText(9, TEXT("幫助"));//關(guān)聯(lián)圖像列表m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);m_ToolBar.GetToolBarCtrl().SetHotImageList(&m_HotImageList);//設(shè)置按鈕和圖標(biāo)的大小m_ToolBar.SetSizes(CSize(40, 40), CSize(32, 32));//顯示工具欄RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE }05. 秘笈心法
熱點(diǎn)效果的實(shí)現(xiàn)方法
實(shí)例使用了CToolBar類的SetHotImageList方法來(lái)實(shí)現(xiàn)熱點(diǎn)效果,也可以通過(guò)處理鼠標(biāo)移動(dòng)消息(WM_MOUSEMOVE)來(lái)實(shí)現(xiàn)該效果,當(dāng)鼠標(biāo)移動(dòng)到按鈕上時(shí),就使用SetButtonInfo來(lái)刷新圖像,當(dāng)然在鼠標(biāo)移動(dòng)前應(yīng)當(dāng)先記錄工具欄按鈕的區(qū)域信息。
06. 源碼下載
下載:【MFC】工具欄按鈕的熱點(diǎn)效果.rar
07. 附錄
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【MFC】工具栏按钮的热点效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【MFC】根据菜单创建工具栏
- 下一篇: 【MFC】定义XP风格的工具栏