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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】工具栏按钮多选效果本

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

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 案例概述
    • 02. 開發(fā)環(huán)境
    • 03. 關(guān)鍵技術(shù)
    • 04. 程序設(shè)計
    • 05. 秘笈心法
    • 06. 源碼下載
    • 07. 附錄

01. 案例概述

多選效果就是指工具欄按鈕有按下的效果,這種按鈕再次按動時才能彈起,不具備自動彈起的功能。多選效果在應(yīng)用軟件中經(jīng)常遇到,例如WORD軟件中,文本是否具有粗體、斜線和下劃線的效果,通過工具欄按鈕的多選效果可以一目了然,給用戶帶來便捷。按鈕效果如下圖所示。

溫馨提示

工具欄中的按鈕與消息處理函數(shù)映射好之后才可以使用,否則是灰色的按鈕。

02. 開發(fā)環(huán)境

系統(tǒng)環(huán)境:Windows 10

開發(fā)環(huán)境:Visual Studio 2019

03. 關(guān)鍵技術(shù)

同實現(xiàn)工具欄按鈕單選效果的方法相同,多選效果任然通過類CToolBar的SetButtonInfo方法實現(xiàn),只要將nStyle參數(shù)的取值設(shè)置為TBBS_CHECKBOX,工具欄上的按鈕就具有多選效果了。

04. 程序設(shè)計

(1)新建一個基于單文檔視圖結(jié)構(gòu)的應(yīng)用程序。

(2)在CMainFrame類中聲明一個CToolBar對象和CImageList對象。

protected: // 控件條嵌入成員//CToolBar m_wndToolBar;CStatusBar m_wndStatusBar;CToolBar m_ToolBar;CImageList m_ImageList;int m_PosY = 0;

(3)在CMainFrame類的OnCreate函數(shù)中創(chuàng)建工具欄,函數(shù)實現(xiàn)代碼如下。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | CBRS_FLOATING | WS_VISIBLE | CBRS_ALIGN_TOP | TBSTYLE_FLAT)){TRACE0("未能創(chuàng)建工具欄\n");return -1; // 未能創(chuàng)建}//創(chuàng)建圖像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);CString strPath;HICON hIcon;for (int i = 1; i < 10; i++){strPath.Format(TEXT(".\\res\\toolbar\\%02d.ico"), i);hIcon = (HICON)LoadImage(NULL, strPath, IMAGE_ICON, 32, 32, LR_LOADFROMFILE);m_ImageList.Add(hIcon);}//設(shè)置工具欄按鈕m_ToolBar.SetButtons(NULL, 9);//設(shè)置工具欄按鈕樣式集資源IDm_ToolBar.SetButtonInfo(0, ID_ADDDATA, TBBS_CHECKBOX, 0);m_ToolBar.SetButtonText(0, TEXT("優(yōu)化"));m_ToolBar.SetButtonInfo(1, ID_UPDATEDATA, TBBS_CHECKBOX, 1);m_ToolBar.SetButtonText(1, TEXT("調(diào)試"));m_ToolBar.SetButtonInfo(2, ID_DELETEDATA, TBBS_CHECKBOX, 2);m_ToolBar.SetButtonText(2, TEXT("平臺"));m_ToolBar.SetButtonInfo(3, ID_FIRSTDATA, TBBS_CHECKBOX, 3);m_ToolBar.SetButtonText(3, TEXT("編碼"));m_ToolBar.SetButtonInfo(4, ID_PREVIOUSDATA, TBBS_CHECKBOX, 4);m_ToolBar.SetButtonText(4, TEXT("語言"));m_ToolBar.SetButtonInfo(5, ID_NEXTDATA, TBBS_CHECKBOX, 5);m_ToolBar.SetButtonText(5, TEXT("移植"));m_ToolBar.SetButtonInfo(6, ID_LASTDATA, TBBS_CHECKBOX, 6);m_ToolBar.SetButtonText(6, TEXT("雙核"));m_ToolBar.SetButtonInfo(7, ID_SAVEDATA, TBBS_CHECKBOX, 7);m_ToolBar.SetButtonText(7, TEXT("64位"));m_ToolBar.SetButtonInfo(8, ID_CANCELDATA, TBBS_CHECKBOX, 8);m_ToolBar.SetButtonText(8, TEXT("內(nèi)存"));if (!m_wndStatusBar.Create(this)){TRACE0("未能創(chuàng)建狀態(tài)欄\n");return -1; // 未能創(chuàng)建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));//設(shè)置工具欄按鈕大小m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(60, 55));m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);m_PosY = 80;return 0; }

(4)設(shè)置工具欄按鈕和處理函數(shù)映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_COMMAND_RANGE(ID_ADDDATA, ID_ADDDATA + 9, OnMenuClick) END_MESSAGE_MAP()void CMainFrame::OnMenuClick(UINT nItemID) {CString str, strResult;CDC* pDC = GetDC();m_ToolBar.GetButtonText(nItemID - ID_ADDDATA, str);strResult = TEXT("您選擇了: " + str);pDC->TextOutW(10, m_PosY, strResult);m_PosY += 20;}

05. 秘笈心法

復(fù)選按鈕狀態(tài)的記錄

對于選中的復(fù)選按鈕應(yīng)使用布爾變量進行記錄,每一個按鈕對應(yīng)一個布爾變量,最后通過對布爾變量的判斷可以得到哪些按鈕已經(jīng)被按下,如果兩個復(fù)選按鈕不能同時按下,此時就可以進行判斷。

06. 源碼下載

下載:【MFC】工具欄按鈕多選效果本.rar

07. 附錄

總結(jié)

以上是生活随笔為你收集整理的【MFC】工具栏按钮多选效果本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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