MFC Ribbon界面设计

 Ribbon是类似于office2007样式的界面,它替代了传统的MFC程序里的菜单和工具栏

  MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面好看

  看下面的一个界面,是VC2010示例里的

MFC Ribbon界面设计

  看到它与默认Ribbon样式的区别:

  工具自己设计,MFC提供的Ribbon控件基本都用上了;图片(位图)也是原资源没有的

  那到底怎么实现呢?

  可以注意到的是:类别由面板组成,面板由按钮或文本编辑框或进度条等控件组成

  按钮都是有图片和文字组成,按钮通过按钮集合可以产生类似于下拉菜单的作用

  观察这些按钮,可以发现有两类:小图标的按钮和大图标的按钮

  小图标:像素16×16,32位

  大图标:像素32×32,32位

  关键问题是如何制作这些BitMap以及如何将他们加载到Ribbon界面中。

  1. 制作工具栏BitMap

  在网上找了IconWorkshop这个软件,很好用,可以制作icon图标,也可以用多个icon图标制作位图BitMap。这正是我想要的功能

  自己不会美工,所以在网上找了些素材,做了以下一个工具栏样的32×32像素32位的BitMap

MFC Ribbon界面设计

  看到木有,跟程序默认生成的几个位图很像啊,内牛满面啊

  将这个位图加载到资源中,ID改为IDB_BIG

  2. 修改Ribbon内的按钮图标

  首先,修改类别属性,Large Images和Small Images,Large Images就是大图标,Small Images是小图标。在Large Images中的下拉菜单中选择IDB_BIG

  然后修改面板中的按钮属性,在Large Images属性选项中选择一个合适的图标即可

  小图标也是一样的道理,修改各自Small Images属性即可

  3. 实现下拉菜单

  按钮属性中有个行为的属性,在里面添加相应的菜单(或间隔符)即完成了类似下拉菜单

  还有一些快捷方式的按键(两个向下的箭头、最左上角的图标按钮)也可以设置它们的功能项

  我做出来的界面如下所示

MFC Ribbon界面设计

  4. 将按钮ID和菜单上的ID匹配

  Ribbon中的菜单ID是不能自己设置的,必须绑定在某个菜单上,对菜单的事件响应就是对响应的Ribbon上按钮的响应,所以按了Ribbon界面上的某个按钮就等同于按钮对应的某个菜单

  所以必须将菜单栏也制作完整,给其添加事件消息,将Ribbon中按钮的ID改为对应菜单的ID。菜单不在界面中显示出来不代表它就没用,没它还不行,不知道以后能不能摆脱菜单直接在Ribbon按钮上添加事件。

  5. 修改最小化工具栏上的图标

  上图虽然修改了左上角的按钮图标,但是电脑工具栏上还是现实的MFC图标,使用下面代码进行修改

C++代码
  1. HICON m_hIcon;  
  2. m_hIcon = AfxGetApp()->LoadIcon(IDI_HAHA);  
  3. SetIcon(m_hIcon, TRUE); // Set small icon  
  4. //SetIcon(m_hIcon, FALSE); // Set big icon  

 

转自:http://www.jizhuomi.com/software/181.html

转载于:https://www.cnblogs.com/gd-luojialin/p/9650151.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网手机躁动:“周大炮”追逐“雷布斯”

摘要:周鸿祎选择非自有品牌补贴,可能是看到了小米初期的艰难,也想追求速度,绕开自制手机终端环节。于小米而言,需要解决后续机型承接、持续稳定提升产能;对360而言,需要投入巨量补贴资金&#x…

获取泛型T的ClassT clazz

在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全&#xff0c;并且所有的强制转换都是自动和隐式的&#xff0c;代码的重用率高 然而有时候<method>的入参并不能直接强制转换成泛型的类型,比如说下面这段代码&#xff1a; 很明显String 类…

写给大数据开发初学者的话5

见&#xff1a;http://lxw1234.com/archives/2017/01/832.htm 至此&#xff0c;你的大数据平台底层架构已经成型了&#xff0c;其中包括了数据采集、数据存储与计算&#xff08;离线和实时&#xff09;、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提…

3.spring boot Controller获取请求参数的值

2019独角兽企业重金招聘Python工程师标准>>> 1.获取连接中的参数,使用倒的关键词PathVariable RestController public class HelloController {RequestMapping(value "/hello/{id}",method RequestMethod.GET)public String index(PathVariable("i…

断开的管道 java.io.IOException: Broken pipe 解决方法

断开的管道 java.io.IOException: Broken pipe 解决方法一、Broken pipe产生原因分析1.当访问某个服务突然服务器挂了&#xff0c;就会产生Broken pipe;2.客户端读取超时关闭了连接&#xff0c;这时服务器往客户端再写数据就发生了broken pipe异常&#xff01;二、方案1.问题一…

登录与注册

代码如下 private void btn_login_Click(object sender, EventArgs e){SqlConnection sqlconnection new SqlConnection();sqlconnection.ConnectionString ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;SqlCommand sqlcommand new SqlComman…

四大电商对垒价格战:家电高库存或是推手

摘要&#xff1a;[京东、苏宁、国美、天猫等电商在家电领域的价格战&#xff0c;更多是定价方家电厂商的倒逼]  “五一”期间&#xff0c;电商企业发起的价格战硝烟仍未消散&#xff0c;如今战火又起。一种较为普遍的看法是&#xff0c;此次价格战&#xff0c;正是各家电商企…

三分钟明白 Activiti工作流 -- java运用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、 什么是工作流 以请假为例&#xff0c;现在大多数公司的请假流程是这样的 员工打电话&#xff08;或网聊&#xff09;向上级提出请…

linux命令 ps -ef 的含义

PS是LINUX下最常用的也是非常强大的进程查看命令//以下这条命令是检查java 进程是否存在. ps -ef |grep java下面对命令选项进行说明&#xff1a;-e 显示所有进程。-f 全格式。ps -e 列出程序时&#xff0c;显示每个程序所使用的环境变量。ps -f 用ASCII字符显示 树状结构 &…

vue-i18n使用及踩坑记录

使用步骤 1. 安装 npm i vue-i18n 2. vue-cli下使用 //1. 引入 vue-i18n import Vue from vue import VueI18n from vue-i18n Vue.use(VueI18n)//2. 定义messages const messages {en: {text: {hello: hello world}},zh: {text: {hello: 你好、世界}} }//如果messages字段很多…

idea搭建web项目及tomcat部署总结

该文章为引用文章&#xff0c;原地址为&#xff1a;https://www.cnblogs.com/shindo/p/7272646.html 后面有我自己搭建过程中遇到的问题及解决方案&#xff0c;请参考。 一、创建简单web项目 1、创建一个web project File -> new Project ->选择project sdk 为1.6&#x…

Activiti工作流框架学习(一)环境的搭建和数据表的了解

一、什么是工作流 工作流(Workflow)&#xff0c;就是“业务过程的部分或整体在计算机应用环境下的自动化”&#xff0c;它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使…

中国消费者为何不愿为App付费?

Facebook收购Instagram之后&#xff0c;国内的开发者们唏嘘不已。Instagram的用户不过3000万&#xff0c;却能卖出10亿美元的价格。如果Instagram在国内的话&#xff0c;就算没被关闭也会被抄袭。如果通过收费来赚钱的话&#xff0c;也会因为黑卡变得颗粒无收&#xff0c;最终很…

什么是交换分区

SWAP就是LINUX下的虚拟内存 分区,它的作用是在 物理内存 使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似&#xff0c;但是它是一段连续的磁盘空间&#xff0c;并且对用户不可见。

基础、语法都不是最重要的,学Python最重要的是什么?编程思路!

论述 一些朋友自学python过程中&#xff0c;发现书也能看懂&#xff0c;书上的玩具代码也能看懂&#xff0c;但为啥自己不能做习题&#xff0c;不能写代码解决问题&#xff0c;自己不能动手写代码&#xff1f; 原因 初学者没有学会计算思维、解决问题的方法、编程思路。编程思路…

Windows下启动,关闭Nginx命令

启动 直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx 关闭 nginx -s stop 或者 nginx -s quit stop表示立即停止nginx,不保存相关信息 quit表示正常退出nginx,并保存相关信息 重启(因为改变了配置,需要重启) nginx -s reload 转载于:https://www.cnblogs…

什么是守护进程?

守护进程是在后台运行不受终端控制的进程&#xff08;如输入、输出等&#xff09;&#xff0c;一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点&#xff1a;&#xff08;1&#xff09;用来启动守护进程的终端在启动守护进程之后&#xff0c;需要执行…

Activiti工作流引擎的使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Activiti工作流引擎使用 1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科&#xff1a;工作流引擎 1.1 我与工作流引…

Flurry调查报告:图片和视频应用增长速度最快

据外国媒体报道&#xff0c;移动数据分析公司Flurry近期对应用分类的欢迎度进行研究后发现&#xff0c;就用户使用的时间而言&#xff0c;“图片和视频”应用已成为增长最快的移动应用。 Flurry对各种应用分类的800多万移动用户进行了调查&#xff0c;并利用其分析工具跟踪了1…

JS内存管理与垃圾回收

javascript的内存管理Javascript 是那些被称作垃圾回收语言当中的一员。垃圾回收语言通过周期性地检查那些之前被分配出去的内存是否可以从应用的其他部分访问来帮助开发者管理内存。换句话说&#xff0c;当计算机发现有的内存已经不能被访问到了&#xff0c;就会把它们标记为垃…