MFC下 SDI 单文档 对话框 工具栏编程总结 新手值得一看,

简介:   创建工具栏 分2种情况   对话框的工具栏  和 SDI 单文档工具栏编程      用到的函数        RecalcLayout     当窗体布局发生改变的时候  调用这个函数会调用 RePositionBar重新摆放工具条      ShowControl...
 

创建工具栏 分2种情况   对话框的工具栏  和 SDI 单文档工具栏编程 


    用到的函数 
 
    RecalcLayout     当窗体布局发生改变的时候  调用这个函数会调用 RePositionBar重新摆放工具条 
    ShowControlBar   显示隐藏 工具栏的函数     CControlBar是CToolBar的基类 
    IsWindowVisible  CWnd的函数返回BOOL  检测从CWnd派生的 窗体是否可见 
    CCmdUI           OnUpdateCmdUI消息  用于菜单的维护的一些函数如SetCheck等等    

 

 

1. 工具栏 菜单都是镶嵌在框架类上的对与 一个单文档应用程序来说     首先 定义一个  CToolBar 的对象 


     if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT     //创建一个工具栏
  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||   //加载一个工具栏 资源
  !m_newToolBar.LoadToolBar(IDR_TOOLBAR1))
 {
  TRACE0("Failed to create toolbar\n");
  return -1;      // fail to create
 }

         m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);  //设置工具栏可以停靠 
  this->EnableDocking(CBRS_ALIGN_ANY);  //设置框架窗体可以被停靠     缺一不可
  this->DockControlBar(&m_newToolBar);  //停靠工具栏  

 

       以上是 SDI中MFC框架   OnCreate函数中  代码 

 

2.对话框的工具栏添加  特色工具栏

 

         
 1.        ///////////////////特色工具栏的添加
   CToolBar *m_wndToolBar=new CToolBar;    //工具条对象堆中创建
   m_wndToolBar->CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
    CRect(10,10,0,0));        //创建工具栏
   m_wndToolBar->LoadToolBar(IDR_TOOLBAR1) ; //加载工具栏资源 
   RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);   //停靠工具栏    


    AFX_IDW_CONTROLBAR_FIRST,   AFX_IDW_CONTROLBAR_LAST  
    指的是空间ID的范围,在MFC中  
    AFX_IDW_CONTROLBAR_FIRST   的值为   0xE800  
    AFX_IDW_CONTROLBAR_LAST     的值为   oxE8FF  
   
    意思是这个ID范围内的ControlBar都将被Reposition

 


2.经过上面步骤 已经在对话框上创建了我们家在的菜单资源   然后我们设置每个按钮的位图  通过   CImageList 类  GetToolBarCtrl 函数获得 CToolBarCtrl的一个引用 
 
  步骤是       CImageList * p=new CImageList;  //定义 CImageList对象
               p->Create(30,30,ILC_COLOR32, 0, 13);  //创建图像列表  
               pp->Add(AfxGetApp()->LoadIcon(IDI_ICON13));  //向CImageList对象增加新的图标                pp->Add(AfxGetApp()->LoadIcon(IDI_ICON9));//add 图标
               (m_wndToolBar->GetToolBarCtrl()).SetImageList(pp); //设置图像列表 工具栏的 通过工具控件   CToolBarCtrl 控件  

 

 

3.设置 CToolTipCtrl   就是工具栏上面的浮动提示

 

   CToolTipCtrl *t=new CToolTipCtrl;   //在堆中创建一个 CToolTipCtrl控件
   t->Create(this);  //在本窗体中创建  
   t->SetMaxTipWidth(100);  //设置最大宽度
   t->SetTipBkColor(RGB(233,222,232));    //设置背景颜色
   t->SetTipTextColor(RGB(22,122,122)); //设置提示的文本颜色 
   t->AddTool(m_wndToolBar,"导出当前员工在线信息到磁盘",CRect(0,0,20,20),ID_OUTPUT);  //每次增加的tip都对一个这一个工具栏按钮的ID
   t->AddTool(m_wndToolBar,"清空系统运行时候产生的缓存文件",CRect(0,0,20,20),IDM_CLEAR); //ID就是工具栏按钮ID 
   t->Activate(true); 
    (m_wndToolBar->GetToolBarCtrl()).SetToolTips(t); //将TIP增加到 工具栏

    
             

 


 

目录
相关文章
|
5月前
|
数据安全/隐私保护 Android开发 Windows
2025 年三款免费高清无水印视频录制工具推荐合集
本文介绍了三款免费高清录屏软件:EVCapture、Bandicam 和 屏幕录像机(oCam)。EVCapture 功能强大,支持视频录制与直播,提供分屏录制、实时按键显示等;Bandicam 适合游戏录屏,可自定义录制区域并添加Logo,还支持音频和摄像头设置;oCam 小巧灵活,支持多种视频格式(如GIF、MP4等)及音频、截图功能。三者均无水印,画质清晰,满足不同录屏需求。资源地址已提供,可供下载体验。
4187 0
|
8月前
|
Java 数据库连接 mybatis
MyBatis篇-映射关系(1-1 1-n n-n)
本文介绍了MyBatis中四种常见关系映射的配置方法,包括一对一、一对多、多对一和多对多。**一对一**通过`resultMap`实现属性与字段的映射;**一对多**以用户-角色为例,使用`<collection>`标签关联集合数据;**多对一**以作者-博客为例,利用`<association>`实现关联;**多对多**则通过引入第三方类(如UserForDept)分别在User和Dept类中添加集合属性,并配置对应的`<collection>`标签完成映射。这些方法解决了复杂数据关系的处理问题,提升了开发效率。
|
11月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
存储 编解码 算法
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(一)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
1210 1
|
12月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
数据库 数据库管理 索引
主键和唯一键有什么区别?
【8月更文挑战第1天】
1018 6
主键和唯一键有什么区别?
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
1406 0
|
域名解析 存储 缓存
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
【5月更文挑战第21天】本文探讨了DNS缓存机制的原理及优化方法。DNS缓存是存储已解析域名与IP地址的临时数据库,能减少网络延迟,减轻服务器负担并提升用户体验。优化策略包括增加缓存容量,设置合理过期时间,使用智能DNS服务及定期清理缓存。文中还提供了一个Python示例,展示如何通过缓存提升域名解析速度。
1630 2
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
|
分布式计算 Kubernetes Serverless
Hago 的 Spark on ACK 实践
Hago 的 Spark on ACK 实践
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
602 0
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系