日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】工具栏按钮的热点效果

發(fā)布時間:2024/4/24 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MFC】工具栏按钮的热点效果 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。