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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

工具栏,状态栏(VC_MFC)

發布時間:2025/3/19 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工具栏,状态栏(VC_MFC) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

工具欄
狀態欄

(本章節中例子都是用 VS2005 編譯調試的)


工具欄

[對話框][單/多文檔]

相關類: ? ??CToolBar? ?, ?CToolBarCtrl

?

?

對話框

相關函數:

  • 創建工具欄:?  Create
  • 加載工具欄:?  LoadToolBar
  • 移動窗口:?  MoveWindow
  • 獲得客服區/窗口區域:?  GetClientRect /?GetWindowRect
  • 調整和重置窗口客戶區的控制欄(工具欄/狀態欄)位置:  ?RepositionBars
  • 獲得請求的窗口對象:  ?GetWindow
  • 獲得在窗口管理鏈表中的下個窗口:  ?GetNextWindow
  • 設置工具欄按鈕和按鈕上圖像大小:?  SetSizes
  • 設置對話框按鈕:?  SetButtons
  • 獲得 CToolBarCtrl 對象:?  GetToolBarCtrl
  • 設置圖標:?  SetImageList

操作步驟:

菜單索引:

代碼示例:

[加載工具欄][加載自定義位圖的工具欄]

加載工具欄

在對話框中添加工具欄,首先添加一個工具欄資源(資源 ID 為?IDR_TOOLBAR1),工具欄資源和對話框資源,資源視圖如下:

然后為對話框添加一個 CToolBar 對象變量名為 m_tbar,然后在對話框初始化函數(即 OnInitDialog?函數)中添加實現代碼,代碼如下:

View Code //創建 ToolBar 和加載資源 if(m_tbar.Create(this) && m_tbar.LoadToolBar(IDR_TOOLBAR1)) {/* 前期準備工作 *************************************************************************/CRect rcClientOld;CRect rcClientNew;// 用 rcClientOld 獲取客戶區間 GetClientRect(rcClientOld); // 用 rcClientNew 獲得除了 ToolBar 區的對話框客戶區RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);//獲得在加入 ToolBar 后控件應該移動的偏移偏移量CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);/* 重新設置對話框的窗體區間 *************************************************************///得到對話框窗體區間 CRect rcWindow;GetWindowRect(rcWindow);//修改對話框寬度和高度,即讓對話框添加上 ToolBar 的高度和適應 ToolBar 的高度rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();//移動對話框 MoveWindow(rcWindow,FALSE); /* 調整控件位置 *************************************************************************/CRect rcChild;//獲得窗口控件 CWnd* pwndChild = GetWindow(GW_CHILD); //遍歷控件while(pwndChild) {//獲得控件區間pwndChild->GetWindowRect(rcChild);//將屏幕坐標轉換為客戶區坐標 ScreenToClient(rcChild);//將控件移動相對位置 rcChild.OffsetRect(ptOffset);//移動控件pwndChild->MoveWindow(rcChild,FALSE);//獲得下個控件句柄pwndChild = pwndChild->GetNextWindow();}//顯示 ToolBarRepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); }

運行結果:

加載自定義位圖的工具欄

在對話框中添加工具欄,首先添加一個位圖資源(資源 ID 為?IDB_BITMAP1),位圖資源和對話框資源,資源視圖如下:

然后為對話框添加一個 CToolBar 對象變量名為 m_tbar,然后在對話框初始化函數(即 OnInitDialog?函數)中添加實現代碼,(具體代碼和添加工具欄中的相似)代碼如下:

View Code //創建工具欄 if(m_tbar.Create(this,WS_CHILD|WS_VISIBLE|CBRS_SIZE_FIXED|CBRS_TOP|CBRS_TOOLTIPS)) {/* 創建自定義位圖的工具欄初始化工作 ***************************************************///定義工具欄上的按鈕的所對應的標識static UINT BASED_CODE DockTool[]={IDOK,IDCANCEL};//加載工具欄要用的位圖 CBitmap bitmap;bitmap.LoadBitmapW(IDB_BITMAP1);//建立工具欄中的圖片列表static CImageList m_ilToolBar;m_ilToolBar.Create(100,100,ILC_COLOR32,0,0);//以寬 100,長 100 像素來切割圖片m_ilToolBar.Add(&bitmap,(CBitmap*)NULL);//設置工具欄按鈕圖片m_tbar.GetToolBarCtrl().SetImageList(&m_ilToolBar);//設置工具欄的按鈕大小,和按鈕中位圖大小(注意: 按鈕大小必須大于按鈕中位圖大小) SIZE sbutton,sImage;sbutton.cx= 110;sbutton.cy=110;sImage.cx=100;sImage.cy=100;m_tbar.SetSizes(sbutton,sImage);//設置工具欄上按鈕的所對應的標識,和按鈕個數m_tbar.SetButtons(DockTool,(UINT)2);/* 前期準備工作 *************************************************************************/CRect rcClientOld;CRect rcClientNew;// 用 rcClientOld 獲取客戶區間 GetClientRect(rcClientOld); // 用 rcClientNew 獲得除了 ToolBar 區的對話框客戶區RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);//獲得在加入 ToolBar 后控件應該移動的偏移偏移量CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);/* 重新設置對話框的窗體區間 *************************************************************///得到對話框窗體區間 CRect rcWindow;GetWindowRect(rcWindow);//修改對話框寬度和高度,即讓對話框添加上 ToolBar 的高度和適應 ToolBar 的高度rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();//移動對話框 MoveWindow(rcWindow,FALSE); /* 調整控件位置 *************************************************************************/CRect rcChild;//獲得窗口控件 CWnd* pwndChild = GetWindow(GW_CHILD); //遍歷控件while(pwndChild) {//獲得控件區間pwndChild->GetWindowRect(rcChild);//將屏幕坐標轉換為客戶區坐標 ScreenToClient(rcChild);//將控件移動相對位置 rcChild.OffsetRect(ptOffset);//移動控件pwndChild->MoveWindow(rcChild,FALSE);//獲得下個控件句柄pwndChild = pwndChild->GetNextWindow();}//顯示 ToolBarRepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); }

運行結果:

?

單/多文檔

相關函數:

  • 創建工具欄:?  Create
  • 加載工具欄:?  LoadToolBar
  • 設置工具欄按鈕和按鈕上圖像大小:?  SetSizes
  • 設置對話框按鈕:?  SetButtons
  • 獲得 CToolBarCtrl 對象:?  GetToolBarCtrl
  • 設置圖標:?  SetImageList
  • 設置工具欄可以停靠位置:?  EnableDocking
  • 設置框架窗口被工具欄停靠:  ?DockControlBar
  • 設置框架可以讓工具欄停靠位置:?  EnableDocking
  • 判斷窗口是否可見:?  IsWindowVisible
  • 隱藏/顯示工具欄:?  ShowControlBar

操作步驟:

菜單索引:

代碼示例:

[加載工具欄][加載帶自定義位圖工具欄][顯示/隱藏工具欄]

加載工具欄

在文檔中添加工具欄,這個功能只能在框架類中完成(即?CFrameWnd 類),由于一生成 單文檔/多文檔 工程時候,會為程序添加一個默認的工具欄(資源 ID 為).這里用的是單文檔工程這個工具欄的資源視圖如下:

這個工具欄的添加在框架類的初始化(即 OnCreate 函數)中,具體代碼如下(省略了無關代碼):

View Code 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("未能創建工具欄\n");return -1; // 未能創建 }...//使工具欄可以停靠 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);... }

運行結果:

加載自定義位圖的工具欄

在文檔中添加工具欄,這個功能只能在框架類中完成(即?CFrameWnd 類),這里生成的是單文檔工程,然后為文檔添加一個位圖資源,資源視圖如下:

然后為框架類添加一個?CToolBar 對象變量名為 m_Mytbar,在框架類的初始化(即 OnCreate 函數)中,添加相關的實現代碼,具體代碼如下:

View Code //創建自定義工具欄 if (m_Mytbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) {//定義工具欄上的按鈕的所對應的標識static UINT BASED_CODE DockTool[]={ID_FILE_NEW,ID_FILE_OPEN};//加載工具欄要用的位圖 CBitmap bitmap;bitmap.LoadBitmapW(IDB_BITMAP1);//建立工具欄中的圖片列表static CImageList ilToolBar;ilToolBar.Create(100,100,ILC_COLOR32,0,0);//以寬 100,長 100 像素來切割圖片ilToolBar.Add(&bitmap,(CBitmap*)NULL);//設置工具欄按鈕圖片m_Mytbar.GetToolBarCtrl().SetImageList(&ilToolBar);//設置工具欄的按鈕大小,和按鈕中位圖大小(注意: 按鈕大小必須大于按鈕中位圖大小) SIZE sbutton,sImage;sbutton.cx= 110;sbutton.cy=110;sImage.cx=100;sImage.cy=100;m_Mytbar.SetSizes(sbutton,sImage);//設置工具欄上按鈕的所對應的標識,和按鈕個數m_Mytbar.SetButtons(DockTool,(UINT)2);//設置工具欄使其可以停靠在框架窗口上 m_Mytbar.EnableDocking(CBRS_ALIGN_ANY);//把工具欄停靠在框架窗口上DockControlBar(&m_Mytbar); }

運行結果:

工具欄的顯示與隱藏

接著上個代碼示例,為文檔程序在主菜單欄上添加個 顯示/隱藏工具欄 的菜單項,完成 顯示/隱藏工具欄 的這個功能.菜單資源(菜單資源 ID 為?IDR_MAINFRAME,菜單項 ID 為 ID_TB)視圖如下:

為菜單項 顯示/隱藏工具欄?在框架類中添加事件響應函數,后在事件響應函數中添加相關操作,具體代碼如下:

if(m_Mytbar.IsWindowVisible())ShowControlBar(&m_Mytbar,false,false); elseShowControlBar(&m_Mytbar,true,false);

運行結果:

?


狀態欄

[對話框][單/多文檔]

相關類:  ?CStatusBar? , ?CStatusBarCtrl

?

對話框

相關函數:

  • 移動窗口:?  MoveWindow
  • 獲得客服區/窗口區域:?  GetClientRect?/?GetWindowRect
  • 調整和重置窗口客戶區的控制欄(工具欄/狀態欄)位置:  ?RepositionBars
  • 創建狀態欄:?  Create
  • 設置狀態欄指示器(用于添加或減少狀態欄上窗格):?  SetIndicators
  • 獲得?/?設置狀態欄上窗格的顯示的字符串:?  GetPaneText /?SetPaneText
  • 用標識獲得窗格索引:?  CommandToIndex
  • 獲得 / 設置窗格屬性(ID,樣式,寬度):?  GetPaneInfo?/?SetPaneInfo?
  • 獲得索引窗口格的矩形大小:?  GetItemRect
  • 獲得索引窗口格的 ID:?  GetItemID
  • 獲得 / 設置索引窗口格的風格:?  GetPaneStyle?/?SetPaneStyle
  • 設置工具寬度:?  SetMinHeight
  • 設置所有窗口格的圖標:?  SetIcon

具體步驟:

代碼示例:

在對話框中添加狀態欄,首先添加兩個圖標資源(資源 ID 為 IDI_ICON1,IDI_ICON2),圖標資源和對話框資源,資源視圖如下:

然后為對話框添加一個 CStatusBar?對象變量名為 m_StatBar,然后在對話框初始化函數(即 OnInitDialog?函數)中添加實現代碼,具體代碼如下:

View Code //創建狀態欄 if(m_StatBar.Create(this)) {// 狀態行指示器對應 IDstatic UINT indicators[] ={ID_SEPARATOR, ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};// 設置狀態欄指示器 ID 和指示器個數m_StatBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));// 設置狀態欄指示器文本m_StatBar.SetPaneText(0,L"指示器1",0);m_StatBar.SetPaneText(1,L"指示器2",0);m_StatBar.SetPaneText(2,L"指示器3",0);m_StatBar.SetPaneText(3,L"指示器4",0);// 設置狀態欄指示器屬性m_StatBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL ,100);m_StatBar.SetPaneInfo(1,ID_INDICATOR_CAPS,SBPS_NORMAL ,100);m_StatBar.SetPaneInfo(2,ID_INDICATOR_NUM,SBPS_NORMAL ,100);m_StatBar.SetPaneInfo(3,ID_INDICATOR_SCRL,SBPS_NORMAL ,100);//為狀態欄指示器添加圖標HICON icon[2];icon[0] = AfxGetApp()->LoadIcon (IDI_ICON1);icon[1] = AfxGetApp()->LoadIcon (IDI_ICON2);m_StatBar.GetStatusBarCtrl().SetIcon(0,icon[0]);m_StatBar.GetStatusBarCtrl().SetIcon(1,icon[1]);m_StatBar.GetStatusBarCtrl().SetIcon(2,icon[0]);m_StatBar.GetStatusBarCtrl().SetIcon(3,icon[1]);//設置狀態欄高度m_StatBar.GetStatusBarCtrl().SetMinHeight(50);/* 前期準備工作 *************************************************************************/CRect rcClientOld;CRect rcClientNew;// 用 rcClientOld 獲取客戶區間 GetClientRect(rcClientOld); // 用 rcClientNew 獲得除了 CStatusBar 區的對話框客戶區 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);/* 這里要注意下如果你在對話框中添加了工具欄和狀態欄,那么這里獲得的是這些控制欄的矩形區,即高度是控制欄(工具欄加狀態欄)的總和,寬度是控制欄中最寬的那個..********//* 重新設置對話框的窗體區間 *************************************************************/// 得到對話框窗體區間 CRect rcWindow;GetWindowRect(rcWindow);// 修改對話框寬度和高度,即讓對話框添加上 CStatusBar 的高度和適應 CStatusBar 的寬度rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();// 移動對話框 MoveWindow(rcWindow,FALSE); // 顯示狀態欄RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); }

運行結果:

?

單/多文檔

相關函數:

  • 創建狀態欄:?  Create
  • 設置狀態欄指示器(用于添加或減少狀態欄上窗格):?  SetIndicators
  • 獲得?/?設置狀態欄上窗格的顯示的字符串:?  GetPaneText?/?SetPaneText
  • 用標識獲得窗格索引:?  CommandToIndex
  • 獲得 / 設置窗格屬性(ID,樣式,寬度):?  GetPaneInfo?/?SetPaneInfo?
  • 獲得索引窗口格的矩形大小:?  GetItemRect
  • 獲得索引窗口格的 ID:?  GetItemID
  • 獲得 / 設置索引窗口格的風格:?  GetPaneStyle?/?SetPaneStyle
  • 設置工具寬度:?  SetMinHeight
  • 設置所有窗口格的圖標:?  SetIcon

代碼示例:

在文檔中添加狀態欄,這個功能只能在框架類中完成(即?CFrameWnd 類),由于一生成 單文檔/多文檔 工程時候,會為程序添加一個默認的狀態欄.為了希望在這個默認的狀態欄上添加資源圖標(資源 ID 為 IDI_ICON1,IDI_ICON2),定義的兩個圖標資源視圖如下:

這個狀態欄的添加在框架類的初始化(即 OnCreate 函數)中,而窗格的索引值在框架類的實現文件頭出定義,具體代碼如下(省略了無關代碼):

View Code ... // 狀態行指示器對應 ID static UINT indicators[] = {ID_SEPARATOR, // 狀態行指示器 ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL, };...int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {...if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("未能創建狀態欄\n");return -1; // 未能創建 }/* 以下是我為狀態欄添加圖標的實現代碼 *****************///為狀態欄指示器添加圖標HICON icon[2];icon[0] = AfxGetApp()->LoadIcon (IDI_ICON1);icon[1] = AfxGetApp()->LoadIcon (IDI_ICON2);m_wndStatusBar.GetStatusBarCtrl().SetIcon(0,icon[0]);m_wndStatusBar.GetStatusBarCtrl().SetIcon(1,icon[1]);m_wndStatusBar.GetStatusBarCtrl().SetIcon(2,icon[0]);m_wndStatusBar.GetStatusBarCtrl().SetIcon(3,icon[1]);//設置狀態欄高度m_wndStatusBar.GetStatusBarCtrl().SetMinHeight(50);// 設置狀態欄指示器屬性m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL ,100);m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_CAPS,SBPS_NORMAL ,100);m_wndStatusBar.SetPaneInfo(2,ID_INDICATOR_NUM,SBPS_NORMAL ,100);m_wndStatusBar.SetPaneInfo(3,ID_INDICATOR_SCRL,SBPS_NORMAL ,100);return 0; }....

運行結果:

總結

以上是生活随笔為你收集整理的工具栏,状态栏(VC_MFC)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本欧美在线 | 国产精品国产三级国产在线观看 | 麻豆免费在线观看 | 国产视频黄 | 制服丝袜第一页在线观看 | 狠狠操婷婷 | 三级第一页 | 日本中文字幕在线 | www.欧美日韩 | 亚洲久久久久久久 | 美梦视频大全在线观看高清 | 青青草原在线免费观看视频 | 国产一区伦理 | 天堂8在线天堂资源bt | 性欧美8khd高清极品 | 在线观看黄色片网站 | av片国产 | 国产不卡在线播放 | 欧美另类视频在线 | 亚洲欧洲视频在线观看 | 国产精品videossex国产高清 | 香蕉黄色片 | 欧美激情小视频 | 亚洲欧洲日韩 | 中日韩黄色片 | 欧美视频在线看 | 九色91popny蝌蚪新疆 | 成人在线观看你懂的 | h视频在线观看网站 | 成人av电影在线播放 | 91在线观看成人 | 伊人视频在线观看 | 久久黄色大片 | 日本边添边摸边做边爱 | 黄色一级片 | 三级视频国产 | 天天摸天天碰天天爽天天弄 | 日韩av电影手机在线观看 | 一本色道久久加勒比精品 | 五月婷综合 | 日本免费一区二区三区四区 | 亚洲国产精品成人无久久精品 | 一区二区三区不卡在线 | 成年人视频在线免费看 | 久久r精品| 综合五月婷婷 | 亚洲av综合永久无码精品天堂 | 黄色三级带 | 色网址在线观看 | 黄色av一级片 | 免费黄色网址在线 | 亚洲一级片在线观看 | www.黄色av | 国产夫妻在线 | 黄色国产在线观看 | www.黄色网址| 国产高清视频在线 | 自拍三级视频 | 国产一区二区精品久久 | av日日夜夜 | 天天躁日日躁狠狠躁av麻豆 | 伊人一二三 | 欧美精品www | 美女诱惑一区 | 女人做爰全过程免费观看美女 | 在线a网 | 久久久精品免费观看 | 日日干夜夜骑 | 中文字幕免费观看视频 | 免费人成在线观看视频播放 | 免费看污黄网站在线观看 | 亚洲天堂精品在线观看 | 婷婷激情五月 | www.黄色在线观看 | 天天做天天爱夜夜爽 | chinese麻豆新拍video | 美女伦理水蜜桃4 | 国产欧美一级片 | 欧美一区二区福利视频 | 亚洲不卡一区二区三区 | 精品人妻一区二区三区久久 | 91久久精品日日躁夜夜躁欧美 | 日韩videos| 色在线播放 | 真实乱视频国产免费观看 | 色女人综合 | 一区三区在线观看 | 国产一卡二卡在线播放 | 亚洲美女视频在线观看 | 欧美人妻一区二区三区 | 91美女在线观看 | 800av免费在线观看 | 九草在线视频 | 色播激情 | 亚洲中文字幕一区在线 | 成人激情在线观看 | 校园春色 亚洲色图 | 久久久影视 | 领导揉我胸亲奶揉下面 |