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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【MFC】工具栏按钮单选效果

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

00. 目錄

文章目錄

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

01. 案例概述

Visual C++在設(shè)計(jì)對話框資源的時(shí)候,有一個(gè)控件選擇的工具欄,該工具欄上的按鈕只有一個(gè)是有效的。案例效果如下圖所示。

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

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

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

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

使用工具欄類CToolBar的SetButtonInfo方法可以修改工具欄按鈕的樣式,方法中的nStyle參數(shù)就是用來設(shè)置按鈕具體的樣式,將樣式設(shè)置為TBBS_GROUP和TBBS_CHECKGROUP就可以實(shí)現(xiàn)單選效果。TBBS_GROUP決定哪些按鈕是一組單選按鈕,用TBBS_CHECKGROUP分別設(shè)置每個(gè)按鈕。

04. 程序設(shè)計(jì)

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

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

protected: // 控件條嵌入成員//CToolBar m_wndToolBar;CStatusBar m_wndStatusBar;CToolBar m_ToolBar;CImageList m_ImageList;CRect m_RectFloat;

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

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;//if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||// !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))//{// TRACE0("未能創(chuàng)建工具欄\n");// return -1; // 未能創(chuàng)建//}if (!m_wndStatusBar.Create(this)){TRACE0("未能創(chuàng)建狀態(tài)欄\n");return -1; // 未能創(chuàng)建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); TODO: 如果不需要可停靠工具欄,則刪除這三行//m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//EnableDocking(CBRS_ALIGN_ANY);//DockControlBar(&m_wndToolBar);if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)){TRACE0("未能創(chuàng)建工具欄\n");return -1; // 未能創(chuàng)建}//創(chuàng)建圖像列表m_ImageList.Create(24, 24, ILC_COLOR32 | ILC_MASK, 0, 0);//向圖像列表中添加圖像CString strPath;HICON hIcon;for (int i = 0; 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, 6);//設(shè)置工具欄首按鈕的狀態(tài)UINT nStyle;m_ToolBar.SetButtonInfo(0, ID_POINTER, TBBS_GROUP | TBBS_CHECKGROUP, 0);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(0);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(0, nStyle);m_ToolBar.SetButtonInfo(1, ID_PEN, TBBS_CHECKGROUP, 1);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(1);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(1, nStyle);m_ToolBar.SetButtonInfo(2, ID_RECTANGLE, TBBS_CHECKGROUP, 2);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(2);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(2, nStyle);m_ToolBar.SetButtonInfo(3, ID_PARALLE, TBBS_CHECKGROUP, 3);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(3);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(3, nStyle);m_ToolBar.SetButtonInfo(4, ID_ROUND, TBBS_CHECKGROUP, 4);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(4);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(4, nStyle);m_ToolBar.SetButtonInfo(5, ID_ROUNDRECT, TBBS_CHECKGROUP, 5);//獲取工具欄按鈕的狀態(tài)nStyle = m_ToolBar.GetButtonStyle(5);//設(shè)置工具欄按鈕是否另行顯示nStyle &= ~TBBS_WRAPPED;//設(shè)置工具欄按鈕的樣式m_ToolBar.SetButtonStyle(5, nStyle);//刷新工具欄m_ToolBar.Invalidate();//重新計(jì)算框架內(nèi)窗體布局m_ToolBar.GetParentFrame()->RecalcLayout();//設(shè)置工具欄按鈕大小m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(31, 32));//設(shè)置工具欄圖標(biāo)列表m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);//設(shè)置工具欄停靠方式m_ToolBar.EnableDocking(0);//設(shè)置窗口停靠方式EnableDocking(0);m_ToolBar.SetWindowTextW(TEXT("工具欄"));GetWindowRect(&m_RectFloat);//計(jì)算工具欄顯示位置CPoint point(m_RectFloat.left + 100, m_RectFloat.top + 100);//將工具欄進(jìn)行浮動顯示FloatControlBar(&m_ToolBar, point, CBRS_ALIGN_LEFT);return 0; }

(4)將命令I(lǐng)D映射到處理函數(shù)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_COMMAND_RANGE(ID_POINTER, ID_POINTER + 6, OnMenuClick) // ON_WM_MENUSELECT() END_MESSAGE_MAP()void CMainFrame::OnMenuClick(UINT nId) {}

05. 秘笈心法

工具欄按鈕的Group屬性

取值TBBS_GROUP用法和單選按鈕控件(Radio Button)的Group屬性相同,單選按鈕控件的Group屬性只在一組按鈕中的第一按鈕上設(shè)置,其后的單選按鈕都和第一個(gè)設(shè)置Group屬性的按鈕是一組,一個(gè)窗體只要有一個(gè)Group屬性的單選按鈕控件就可以實(shí)現(xiàn)單選效果。

06. 源碼下載

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

07. 附錄

總結(jié)

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

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