首页 > 其他分享 >vc入门宝典七(工具栏)

vc入门宝典七(工具栏)

时间:2022-10-05 11:33:08浏览次数:62  
标签:vc 工具栏 wndToolBar 宝典 CBRS WS 按钮 ID


工具栏

                    

何志丹


主要内容:

1, 概要。

2, 常用函数
3, 实例。

4, 动态建立工具条
5, 在工具栏中嵌控件
6, 用对话框加位图按钮作工具条


我们可以在资源编辑器的ToolBar上单击右键,选择Insert ToolBar,选中一个工具栏后,在右边双击它的一项就可以编辑了。我们可以用图形工具条及颜色盒画它的外表,它的属性有ID,长,宽及鼠标指向它时的说明。
一般CToolBar定义在CMainFrame中,其实现在CMainFrame的OnCreate函数中完成。
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("Failed to create toolbar/n");
return -1; // fail to create
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);




Bool Create(CWnd *pParentWnd,
DWORD dwStu;e = WS_CHILD | WS_VISIBLE |CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR);
pParentWnd指定所属窗口。
dwStyle 指定工具栏风格
CBRS_TOP 允许工具栏位于框架窗口顶端。
CBRS_BOTTOM 允许工具栏位于框架窗口底端
CBRS_NOALIGN 父窗口改变尺寸后工具栏位置不变
CBRS_TOOLTIPS 工具栏显示提示条
CBRS_SIZE_DYNAMIC 工具幸是动态的
CBRS_SIZE_FIXED 工具栏是固定的
CBRS_FLOATING 工具栏是浮动的
CBRS_FLYBY 当鼠标从命令按钮上掠过时显示提示信息
CBRS_HIDE_INPLACE 工具栏对用户不可见


SetButtonStyle()函数用来设定命令按钮的风格或间隔区,或设为一组,按钮的风格决定了按钮的外貌和对用户的反应方式.
Void SetButtonStyle(int nIndex,UINT nStyle);
nIndex 指定工具栏中按钮或间隔的索引号.
nStyle TBBS_BUTTON 标准按钮,此为默认值
TBBS_SEPARATOR 间隔区
TBBS_CHECKBOX 自动确认区
TBBS_GROUP 标记为一组按钮的开始
TBBS_CHECKGROUP 标记为一组确认框的开始


ControlBar类的EnableDocking函数和CFrameWnd类的DockControlBar函数配合,设定工具栏的可活动性.
Void EanbleDocking(DWORD dwStyle)
CBRS_ALIGN_TOP 允许工具栏位于客户区上侧
CBRS_ALIGN_BOTTOM 允许工具栏位于客房区下侧
CBRS_ALIGN_LEFT 允许工具栏位于客户区左侧
CBRS_ALIGN_RIGHT 允许工具栏位于客户区右侧
CBRS_ALIGN_ANY 允许工具栏位于客户区的任意位置
CBRS_FLOAT_MULTI 允许多个控制栏在一个迷你框架窗口中浮动


Void DockControlBar(….)
pBar 要浮动的控制栏指针.
nDockBarID指定允许浮动的位置,或为0则不允许浮动,可以由下列值组合而成:
AFX_IDW_DOCKBAR_TOP 控制栏置于框架窗口上侧;
AFX_IDW_DOCKBAR_BOTTOM 控制栏置于框架窗口下侧
AFX_IDW_DOCKBAR_LEFT 控制栏置于框架窗口左侧
AFX_IDW_DOCKBAR_RIGHT 控制栏置于框架窗口右侧




改变工具栏的命令按钮风格,工具栏的按钮一般默认为命令按钮,当放开标鼠标,命令按钮就”弹出来”,如果我们希望命令按钮能留在被按上的状态,就可以把命令按钮的风格设为确认框。在ON_UPDATE_COMMAND_UI消息处理函数中,使用SetCheck()成员函数和SetRadio()成员函数改变按钮状态。
SetCheck()的参数0表示删除状态,1表示确认状态,2表示不确认状态
SetRadio()的参数0表示删除状态,非0表示确认状态。


我们用应用程序向导建立一个单文档程序,在工具栏中添加按钮,ID设定为ID_TIME.在CMainFrame类添加一个布尔数据类型m_bTime,初始值为false.
Ctrl+w添加ID_TIME的ON_COMMANDT和ON_UPDATE_COMMAND_U消息响应函数。
void CMainFrame::OnShowTime()
{
m_bTime = ! m_bTime;
}
void CMainFrame::OnUpdateShowTime(CCmdUI * pCmdUI)
{
pCmdUI ->SetCheck(m_bTime);
}
注意如果有一个同ID的菜单,它会自动根据按钮的情况打上钩钩。


事实上我们可以不用toolbar资源建立一个工具条。代码如下:
UINT nID[]=
{ID_FILE_NEW,
ID_FILE_OPEN,
ID_TIME
};
m_wndToolBar.Create(this);
m_wndToolBar.LoadBitmap(IDB_BITMAP1);
m_wndToolBar.SetButtons(nID,sizeof(nID)/sizeof(UINT));
其中位图的大小要合适,否则会影响美观,最后一行让几个ID与工具栏的按钮和相关。
如果想设置每个按钮的风格,可以将最后一行后面加:
m_wndToolBar.SetButtonStyle(1,TBBS_SEPARATOR);
也可m_wndToolBar.Create(this);
m_wndToolBar.LoadBitmap(IDB_BITMAP1);
m_wndToolBar.SetButtons(NULL,3);
m_wndToolBar.SetButtonInfo(0,ID_FILE_NEW,TBBS_BUTTON,0);
m_wndToolBar.SetButtonInfo(1,ID_FILE_OPEN,TBBS_BUTTON,2);




在工具栏中嵌入控件,如编辑框
1, 定义一个编辑控件对象,不能是局部变量,否则会被释放掉。
2, 调用Create,唯一要注意的是位置要在工具条的地盘上。
CRect rect;
m_wndToolBar.GetItemRect(1,&rect);
edit.Create(WS_CHILD|WS_VISIBLE,rect,&m_wndToolBar,ID_EDIT);


用对话框加位图按钮作工具栏。
插入一个对话框,Styles的style设为child,border设为none.
在CMainFrame中m_wndToolBar的改成CDialogBar,并加一个CBitmapButton bb;
把建立工具条的那一句改为:
m_wndToolBar.Create(this,IDD_DIALOG1,WS_CHILD|WS_VISIBLE|CBRS_TOP,AFX_IDW_STATUS_BAR);
最后一上ID 同自己随便确定。Ctrl+F5,一个极不美观的工具条就出来了。
对按钮进行整理,它们的处理函数仍然上Ctrl+w加。将按钮Styles的Owner drawer和bitmap钩上。在刚才的地方加一句。
bb.AutoLoad(IDC_BUTTON1,&m_wndToolBar);
注意你需要加三幅位图(一幅也可以)。如你的按钮的名字为X,刚三幅位图的名字分别为”XUP”,”XDOWN”,”XFOCUS”,简写为”XU”,”XD”,”XF”.

 

 

 

标签:vc,工具栏,wndToolBar,宝典,CBRS,WS,按钮,ID
From: https://blog.51cto.com/u_15724537/5732460

相关文章

  • vc6.0安装失败解决办法
                                                       ​​何志丹​​---------------------下面的部分是亲身经历安装盘所在目录和安装后......
  • Grafana监控java应用以及vCenter的方法
    Grafana监控java应用以及vCenter的方法背景最开始弄过vCenter的监控.但是发现很多地方已经不合适了.今天看了下jmx监控java的应用.顺便监控了下vCenter.这里简单记......
  • SpringMvc拦截器
                   ......
  • 2022-10-03-SpringMVC执行流程梳理及结合源码断点调试过程源码分析
    SpringMVC执行流程梳理接口方式控制器实现流程分析控制器层代码实现控制器配置SpringMVC.xml配置文件客户端浏览器发起请求,按回车前端控制器拦截所有请求/......
  • springmvc-servlet.xml
    <?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • vcftools如何在Linux系统中安装
    这里,记录一下vcftools的安装教程。1.下载​​https://vcftools.github.io/examples.html​​下载到本地,上传到服务器中。2.解压缩unzipvcftools-vcftools-v0.1.16-18-g......
  • 第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】
    第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】​​前言​​​​推荐​​​​第一季:10简单的谈一下SpringMVC的工作流程​​​​题目​​​​分析​​​​最后​​......
  • graylog rest servcie 启动&集成说明
    参考处理模块定义Graylog2ModuleprotectedvoidaddSystemRestResource(Class<?>restResourceClass){systemRestResourceBinder().addBinding().toI......
  • 004 SpringMVC的原理——主要应对面试官问这个流程哈~
    SpringMVC中的MVC即模型-视图-控制器,该框架围绕一个DispatcherServlet设计,DispatcherServlet会把请求分发给各个处理器,并支持可配置的处理器映射和视图渲染等功能。Sp......
  • win 11 VMware workstations b不可恢复的错误(vcpu-2)
    首先检查一下电脑有没有开启CPU虚拟化,我的已经开启了,按照百度的方法去控制面板卸载程序里面,找到VMware右击更改弹出的安装程序点修复,,结果修复出错了,显示写入文件D:\vm\gl......