目录

工具栏
状态栏

(本章节中例子都是用 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)相关推荐

  1. PyQt5-菜单栏工具栏状态栏的使用(QMenuBar、QToolBar、QStatusBar)

    一.QMenuBar 窗体标题下方QMenuBar作为窗体菜单栏:QMenu对象提供了一个可以添加菜单栏的控件,也可以用于创建上下文菜单和弹出菜单选项: 每个QMenu对象都可以包含一个或者多个QAc ...

  2. PyQt5中为窗口添加菜单工具栏状态栏

    PyQt5中为窗口添加菜单 QtDesigner中添加菜单 移除菜单栏 添加菜单栏 代码中添加菜单 QtDesigner中添加工具栏 代码中添加工具栏 QtDesigner中添加状态栏 代码中添加状态 ...

  3. VC 显示 隐藏 工具栏 状态栏

    显示或者隐藏工具栏和状态栏 这里讨论显示或者隐藏工具栏.状态栏的操作,以及工具栏.状态栏被显示/隐藏时,相关的两个菜单项ID_VIEW_STATUS_BAR.ID_VIEW_TOOLBAR的状态更新. ...

  4. Qt菜单栏-工具栏-状态栏

    1.创建动作 QAction是Qt中用于添加动作的类,可以将它添加在菜单,作为一个菜单项,也可以添加到工具栏,作为一个工具栏按钮. 其中参数一是设置该操作按钮的图标,":/images/ic ...

  5. 给对话框添加菜单 工具栏 状态栏简易方法

    先建立一个基于Dialog 的程序,我给他起了个名字叫:DlgMenuToolbar. 一.如何往基于Dialog的程序添加菜单 [1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项. ...

  6. Qt纯代码实现菜单栏、工具栏、状态栏

    目录 菜单栏 工具栏 状态栏 总体效果 在QWidget中实现菜单栏.工具栏.状态栏 其他 子窗口获取父窗口指针 QWidget阻塞模式 本篇演示的例子是在QMainWindow中进行的,在QWidg ...

  7. QT添加菜单栏-工具栏-中心区域-状态栏-dock 示范

    QT添加菜单栏-工具栏-中心区域-状态栏-dock 示范 QT添加菜单栏-工具栏-中心区域-状态栏-dock示范.rar-QT文档类资源-CSDN下载QT添加菜单栏-工具栏-中心区域-状态栏-dock ...

  8. html 状态栏显示,网页屏蔽状态栏 打开的网页怎么隐藏浏览器的状态栏

    打开网页,状态栏不显示怎么办 网页浏览器的状态栏不见了怎么弄出来? 答;在网页浏览器里最上端,"查看"菜单下点击工具栏,勾选状态栏它就出来了 .如果还不行,那就试试重置IE浏览器. ...

  9. java swt 状态栏_java – 在Mac上美化SWT应用程序

    SWT旨在实现跨平台,因此可以在Mac上运行.问题是它承认了麦克兰的主要罪行 – 它是UGLY.工具栏看起来不像Mac工具栏,状态栏看起来不像Mac状态栏等. 有没有人有任何使SWT应用程序看起来更像 ...

最新文章

  1. 京东方网络推广外包将为三星提供OLED 屏幕可造成韩国显示产业动荡
  2. 2016年秋季个人阅读计划
  3. acwing yxc总结时间算法复杂度
  4. 微软 CTO 韦青:“程序员 35 岁就被淘汰”是个伪概念 | 人物志
  5. 这个回答让我错失offer!成功收获美团,小米安卓offer
  6. JAVA并发之多线程基础(3)
  7. 代码审计 企业级Web代码安全架构 完整版pdf
  8. ads pspice 导入_怎么由导入ADS中的pspice的参数模型得到器件模型?
  9. 利用matlab制作光栅动画(莫尔条纹动画)
  10. 最新手机语音助手的调研
  11. jqwidgets使用方法
  12. 一些学校的ACM网址
  13. CTF MISC解题思路BUUCTF MISC1-8刷题
  14. 基于Strongswan的IPSec部署
  15. 90后创业:2012教会我的那些事
  16. Maven 自定义 archeType
  17. JavaScript纯前端解析Excel文件
  18. 集成学习精讲01 - SAP大神黄佳新作《零基础学机器学习》节选
  19. VB基础版版务处理_20050410
  20. JFreeChart在Struts2中实现3D折线图统计

热门文章

  1. char类型的实参与const char类型的形参不兼容_C++干货系列——顶层const和底层const...
  2. java between_Java8 Period.between方法坑及注意事项
  3. 大数相乘(c语言/c++)
  4. HTML5需要学html4吗,html5和html4的区别是什么
  5. 达梦想oracle迁移,oracle存储过程迁移达梦心得
  6. 天翼云从业认证(4.6)高并发场景上云实践
  7. 信息系统项目管理师优秀论文:项目风险管理
  8. 笔记-信息化与系统集成技术-物联网
  9. Java中通过NetworkInterface获取主机地址和物理地址等
  10. Express的基本路由实现对get和post等的请求和响应