VS2010与Win7共舞 响应Ribbon控件消息
- 格式:doc
- 大小:151.00 KB
- 文档页数:7
Ribbon界面就是微软从Office2007开始引入的一种为了使应用程序的功能更加易于发现和使用、减少了点击鼠标的次数的新型界面,从实际效果来看,不仅外观漂亮,而且功能直观,用户操作简洁方便。
鸡啄米将以图文结合的方式来说明利用MFC向导创建Ribbon样式的单文档应用程序框架的过程,其实Ribbon应用程序框架的创建有很多地方与普通单文档应用程序类似,所以如果有些步骤的选项不太明白,可以参见VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)。
下面是具体步骤:1、打开VS2010,在菜单中选择File->New->Project,弹出标题为“New Project”的对话框。
在此对话框左侧面板中选择Installed Templates->Visual C++->MFC,然后在中间区域中选择“MFC Application”。
选择了工程类型后,可以看到对话框下边有三个设置项,分别是Name--工程名、Location--解决方案路径、Solution Name--解决方案名称。
鸡啄米在这里将Name设为“Example52”,Location设为“桌面”的路径,Solution Name默认与Name一样,我们这里不作修改。
如下图:点“OK”按钮。
2、这时会弹出“MFC Application Wizard”对话框,上部写有“Welcome to the MFC Application Wizard”,下面显示了当前工程的默认设置。
第一条“Tabbed multiple document interface (MDI)”是说此工程是多文档应用程序。
如果这时直接点下面的“Finish”按钮,可生成具有上面列出设置的多文档程序。
但我们此例是要建立Ribbon样式的单文档应用程序,所以点“Next”按钮再继续设置吧。
3、接下来弹出的对话框上部写有“Application Type”,当然是让选择应用程序类型,我们选择“Single document”,说明要创建的是单文档应用程序框架。
VS2010全新操作软件说明书———功能更强大与操作简单并无冲突欢迎使用VS2010全新操作软件,目前该软件支持的控制卡型号有VSA系列、VSD卡、VS-mini卡、VSC++卡,暂时不支持VSB卡,请勿在VSB卡上更新VS2010软件。
在VSA系列的控制卡中,也仅支持标签颜色为白底红字的控制卡,如果错误的更新了VS2010软件将对控制卡造成不可恢复的损坏,请您谨慎使用。
目录第一部分 VS2010全新软件简介 (3)一、VS2010全新软件概述 (3)二、VS2010全新软件的运行环境及组件介绍 (4)三、VS2010操作界面简介 (5)四、软件主要功能列表 (6)五、菜单功能介绍 (6)1.文件 (6)2.编辑 (7)3.视图 (7)4.节目 (7)5.预览 (7)6.工程 (7)7.控制卡 (7)8.远程 (8)10.帮助 (8)六、快捷工具栏介绍 (8)七、对象工具箱介绍 (8)八、节目对象和属性介绍 (9)九、编辑区介绍 (9)十、系统状态栏介绍 (10)总结 (10)第二章对象的使用和编辑 (10)一、名词解释............................................. 错误!未定义书签。
二、什么是对象 (11)1.编辑对象 (11)2.显示对象 (11)三、对象与属性 (11)四、属性的编辑与对象的操作 (11)五、我们使用的对象 (12)1.编辑类对象 (12)节目和对象 (12)2.显示类对象 (13)文本文字 (13)内码文字 (14)RTF文字 (14)图片显示............................................. 错误!未定义书签。
文字节目单 (14)数字时钟 (15)模拟时钟 (15)动画 (15)表格 (15)天气信息 (15)倒计时 (16)第三章显示屏的管理 (16)一、管理的概念: (16)二、默认的环境 (16)三、发送节目 (16)四、下载节目 (16)五、工程的建立与导出 .................................. 错误!未定义书签。
VS2010/MFC编程入门教程之目录第一部分:VS2010/MFC开发环境VS2010/MFC编程入门之前言VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)第二部分:VS2010-MFC应用程序框架VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)VS2010/MFC编程入门之四(MFC应用程序框架分析)VS2010/MFC编程入门之五(MFC消息映射机制概述)第三部分:对话框VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC编程入门之七(对话框:为对话框添加控件)VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC编程入门之十六(对话框:消息对话框)VS2010/MFC编程入门之十七(对话框:文件对话框)VS2010/MFC编程入门之十八(对话框:字体对话框)VS2010/MFC编程入门之十九(对话框:颜色对话框)第四部分:常用控件VS2010/MFC编程入门之二十(常用控件:静态文本框)VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)第五部分:菜单、工具栏与状态栏VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架VS2010/MFC编程入门之三十九(文档、视图和框架:概述)VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)第七部分:MFC常用类VS2010/MFC编程入门之四十二(MFC常用类:CString类)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)第八部分:字体和文本输出VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)第十部分:Ribbon界面开发VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)VS2010/MFC编程入门之前言鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了。
Win7+OPNET14.5 +VS2010安装及环境变量设置—HITWH-BXC注:OPNET版本为14.5-PL8Win7为64位系统VS2010为旗舰版安装过程:1.拔掉网线,如果有防火墙软件,打开UDP2047端口或者彻底关闭防火墙。
2.执行modeler_145A_PL8_7808_win.exe,按照提示安装OPNET Modeler软件。
最后选择License类型时,请选择Standalone模式。
3.再执行modeler_docs_02-Sep-2008_win.exe和models_145A_PL8_24Sep08_win.exe,按照提示安装文档和库文件。
4.从Start Menu里运行OPNET Modeler,此时会提示无License,选择运行License Management,此时应该没有任何license。
5.关闭License Manager,但不要关闭OPNET Modeler。
6.从OPNET Modeler的Edit-Preference里检查license_server和license_server_standalone设置是否正确。
如果之前选Standalone模式,license_server应该为localhost,本机地址或主机名,licenser_server_standalone应该为TRUE。
如果修改了某些设置,请重新启动OPNET(回到第4步)。
7.将有文件OPNET.Modeler.14.5.License.MakerFFS.exe拷贝到xxx\OPNET\14.5.A\pc_intel_win32\bin下。
双击bin目录下的,OPNET.Modeler.14.5.License.MakerFFS.exe文件回车继续,等到出现结束提示后,回车关闭该窗口。
等待的时间会比较长,如果中途退出,license会不完全。
从OPNET Modeler的License-License Management 菜单启动License Management,此时License文件中应该已经有1000个License了,关闭License Management。
VS2010与Matlab2012a混合编程(Alex-liu版,哈哈)套用今天的签名“最新的VS+最新的MATLAB+最新的WINDOWS=无尽的烦恼”,用了一天的时间去配置相关的环境,确实很囧。
好在现在问题解决了,特发布过程如下,希望能给有需要的朋友带来帮助。
注:因为程序也是刚调通,所以有些原因还没有仔细分析,如果不对,敬请指教。
1.<MATLAB>表示MATLAB按照目录2. 配置过程中的错误,请见:附录3.文中包含"只针对64位WINDOWS"字眼设置的,在WIN32(X86)环境无需设置4.本文配置中可能包含多余的一些配置,不过现在的目的是运行成功哈~~~至于精简部分,待我和大家使用时慢慢研究。
/*******************************************环境:1.VS20102.MATLAB2012a3.WINDOW 7 (X64)******************************************/1.Matlab环境设置要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
在Matlab的Command Window 下输入命令mbuild –setup操作过程如下图:然后输入命令mex –setup以类似的方法配置编译器。
VS2010MFC编程入门之二十四(常用控件:列表框控件ListBox)了解了比较常用的按钮控件,并通过按钮控件实例说明了具体用法。
本文要讲的是列表框控件(ListBox)及其使用实例。
列表框控件简介列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。
列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中一次只能选择一个列表项,而多选列表框可以同时选择多个列表项。
列表框也会向父窗口发送通知消息。
这些通知消息及含义如下:LBN_DBLCLK :用户用鼠标双击了一列表项,只有具有LBS_NOTIFY 的列表框才能发送该消息LBN_ERRSPACE :列表框不能申请足够的动态内存来满足需要LBN_KILLFOCUS :列表框失去输入焦点LBN_SELCANCEL:当前的选择被取消,只有具有LBS_NOTIFY 的列表框才能发送该消息LBN_SELCHANGE:单击鼠标选择了一列表项,只有具有LBS_NOTIFY 的列表框才能发送该消息LBN_SETFOCUS:列表框获得输入焦点WM_CHARTOITEM:当列表框收到WM_CHAR 消息后,向父窗口发送该消息,只有具有LBS_WANTKEYBOARDINPUT 风格的列表框才会发送该消息WM_VKEYTOITEM:当列表框收到WM_KEYDOWN 消息后,向父窗口发送该消息,只有具有LBS_WANTKEYBOARDINPUT 风格的列表框才会发送该消息列表框控件的创建MFC将列表框控件的所有操作都封装到了CListBox类中。
创建列表框控件时,可以在对话框模板中直接拖入列表框控件Listbox,然后添加控件变量使用。
但如果需要动态创建列表框,就要用到CListBox类的Create成员函数了。
Create成员函数的原型如下:virtual BOOL Create(DWORD dwStyle,const RECT&rect,CWnd* pParentWnd,UINT nID);参数rect指定了列表框的位置和尺寸,pParentWnd为父窗口的指针,nID用于指定列表框控件的ID。
解决WIN7系统中VS2010不能使用MSCOMM控件的问题步骤1.VS2010没有自带MSCOMM控件,首先在该页面下载MSCOMM控件包:/detail/rabbit200808/3236756(在此感谢rabbit200808分享)。
2.下载完毕后,把包里的所有文件拷贝到系统目录c:\windows\syswow64下(win 7系统);c:\windows\systom32(XP系统)。
3.如果是win7系统找到c:\windows\syswow64下的CMD.exe,采用管理员模式运行,运行后输入regsvr32 c:\windows\syswow64\mscomm32.ocx会提示注册成功。
见下图:4.点开始->所有程序->附件->运行,输入regedit,启动注册表管理器,在其中找到HKEY_CLASSES_ROOT项下的Licenses项,在其中建立主键4250E830-6AC2-11cf-8ADB-00AA00C00905,键值为kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun。
如果不做这一步会导致在VS2010中报授权错误。
其实也可以用记事本打开下载包中的MSCOMM.SRG文件,就可以看到相关内容。
见图5.接下来是VS2010中的操作,启动VS2010,新建一个MFC工程,随便一个什么工程都行。
在工具箱的位置点击鼠标右键,见图,注意鼠标的位置是在“对话框编辑器”的位置上,点选选择项,图中打圈的地方。
6.要多等一下,在弹出对话框中选COM组件项,注意图中打圈的地方,然后点选浏览,在弹出的文件选择界面中先找到C:\windows\syswow64目录,再找MSCOMM32.ocx 文件,点击打开,会在主键列表中多出Microsoft communications control,version 6.0一项。
至此MSCOMM控件已经加入到VS2010的ActivX的控件列表中了。
vs2010解决方案配置
《VS2010解决方案配置》
在使用Visual Studio 2010进行开发时,配置解决方案是非常重要的一步。
解决方案配置包括对项目的设置、调试选项、编译选项等内容进行配置,确保项目可以正常运行并且满足开发需求。
首先,在Visual Studio 2010中打开解决方案后,我们可以在“解决方案资源管理器”中右键点击解决方案,选择“属性”来对解决方案进行配置。
在弹出的窗口中,我们可以设置不同项目的属性,包括调试、编译、链接、部署等选项。
在调试选项中,我们可以配置启动项目、启动动作、命令行参数、工作目录等内容。
这些设置可以帮助我们在调试时更方便地运行程序并查看运行结果。
在编译选项中,我们可以配置输出路径、生成XML文档、优化选项等内容。
根据项目的具体需求,我们可以对编译选项进行不同的配置,以满足项目的性能和可维护性要求。
另外,在“属性管理器”中,我们还可以对解决方案进行更细致的管理,包括添加不同的配置(Debug、Release等)以及针对不同的平台(x86、x64等)进行配置。
总之,对解决方案进行正确配置是项目开发的重要一步,可以帮助我们更高效地开发和调试代码。
在使用Visual Studio 2010
进行开发时,我们要熟练掌握解决方案配置的方法,以便更好地完成项目开发任务。
Visual Studio 2010系列之创建华丽Ribbon界面(上)随着Office 2007的发布,它改变了以往传统的下拉式菜单用户界面,取而代之的是全新的被称之为“Ribbon”的固定式工具栏界面。
微软声称这种新的用户界面能够使用户更容易地使用软件的各项常用功能,例如Word 2007中的保存,设置格式,插入图片等常用功能,都可以从Ribbon界面快速地访问到,从而提高用户的生产效率。
虽然很多用户还在抱怨“不习惯Ribbon界面”、“很多功能找不到位置”等等,但是,随着微软的“强制”推行,Ribbon界面也在越来越被人们所接受,很多应用软件也开始采用Ribbon界面。
更重要的是,在即将到来的Windows 7中,操作系统本身更是大量地应用了Ribbon界面。
不管我们愿意或者不愿意,Ribbon界面开始大张旗鼓地攻占我们的软件界面,成为继下拉式菜单后新的标准用户界面。
作为用户,我们需要逐渐熟悉这种新的软件用户界面;而作为开发者,更是需要了解和认识这种新的软件用户界面,新的交互方式,从而利于这种新界面的优势,为用户提供更加优秀的软件。
“Ribbon来了!”Windows平台的进化,往往都伴随着系统图形界面的重新设计。
从Windows XP到Windows Vista,最大的革新就是Windows Aero的引入。
而在微软的下一代Windows平台Windows 7中,虽然Aero被保留下来,但是Windows 7的图形用户界面更多的是朝着Office 2007相同的方向前进,无论是系统自带的工具软件,例如画图、写字板等,还是上层的第三方应用软件,例如Office 2007、AutoCAD、SnagIt等等,都全面应用了Ribbon界面。
图1 Windows 7中随处可见的Ribbon界面在传统的软件界面设计中,我们都是采用“文件”、“编辑”、“视图”的菜单模式,这俨然成为软件界面设计的标准。
Visual Studio 2010 MFC Ribbon 用户界面新增Windows7样式,操作方便,效果也很漂亮。
但在透明图标的制作却让初学者头疼。
使用普通的BMP位图做图标背景不透明,很难看。
其实Ribbon上用的图标是32位的位图序列,包含Alpha通道。
Visual Studio 2010 MFC 自带的编辑器不好用,要配合一些图标制作软件,才能制作出32位包含Alpha通道的位图图标序列。
1.准备好需要的32X32普通图标文件,可以从网上下载喜欢的,或是自己手动做。
2.用图标合并工具将图标合并成一个位图序列。
这里我用的是Visual Toolbar 1.5破解版。
使用方法很简单我就不讲了。
3.用photoshop打开各32X32的图标(我这里用png格式的图标),设有N个图标。
新建一个宽度为N乘以32像素,高度为32像素的空白图像,颜色模式为8位的RGB颜色,背景内容为透明,将各图标依次并排拷贝至新的图像上,放好位置,选择“图层”-“合并可见图层”。
当然多图标位图合并也可以使用专业的工具如Visual Toolbar,在我的资源里可以下载。
4.按Ctrl+A全选图像,然后在通道面板中选择创建新通道,默认的是Alpha1通道,按Ctrl+V粘贴刚复制的内容,出现黑白的图像,黑色为纯白色,原物变为灰黑色,双击新建的Alpha1通道,然后用魔棒选中背景区,用黑色油漆桶将背景漆为黑色,再选择反选选中实物区,按“Delete”键将特物区删除成白色。
5.存储图像,格式选择BMP格式,并勾选Alpha通道选项,点保存后弹出BMP选项,使用默认文件格式为Windows,深度为32位,即可保存。
另外,最好制作对应的小图标供使用。
方法是将刚才做好的图标大小调整为16X16,再用同样的方法保存一个32位具有Alpha通道的位图即可。
6.将制作好的32位BMP格式位图资源(32X32图标和对应的16X16图标)导入VC2010项目中,设置ID分别为IDB_Large、IDB_Small,在Ribbon中需要使用该图标的类别控件属性中设置Large Images为IDB_ Large,Small Images为IDB_Small,即可使用刚制作好的位图集。
本教程适用于正在开发桌面应用程序并希望利用新的MFC 功能区框架优势的MFC 开发人员。
通过本教程的步骤,您将了解如何将默认的功能区添加到一个小应用程序中,在Ribbon Designer 中编辑各个功能区控件,然后在运行时使用控件。
您将看到通过MFC 功能区框架编辑和使用功能区控件非常轻松。
在本教程中,将完成在应用程序中添加和自定义根本功能区的所有必要步骤。
本教程涉及实时编译代码并从此文档中复制代码。
如果发生复制错误〔或任何其他问题〕无法编译应用程序,可以在本教程的程序包中找到全部完成的例如,以及每个练习的最终源代码。
这些例如可用于解决编译错误。
先决条件您必须拥有以下内容才能完本钱实验:• Microsoft Visual Studio 2021 Beta 2 〔或更高版本〕• Windows 7学习目标在完本钱教程时,您将了解如何:• 在Visual Studio 2021 中为应用程序创立默认的功能区• 在Ribbon Designer 中添加功能区控件,如按钮、复选框和区块• 在Ribbon Designer 中为功能区控件添加事件处理程序函数• 在运行时使用功能区控件练习1:在应用程序中创立默认功能区在本练习中,将开始在Visual Studio 2021 中从头创立一个Windows 7 风格的带有功能区的MFC应用程序。
您不必编写任何代码来执行这些操作。
只需单击,单击,再单击!任务 1 - 在Visual Studio 2021 中创立新的带有功能区的MFC 工程1. 在Visual Studio 2021 中,使用MFC Application Wizard 创立一个具有默认功能区的MFC 应用程序。
要运行向导,请在File 菜单上,指向New,然后选择Project。
将会显示New Project 对话框。
2. 在New Project 对话框中,展开Project Types 窗格中的Visual C++ 节点,然后选择MFC。
ribbon用法
Ribbon是一种用户界面元素,通常出现在Microsoft Office等应用程序中,用于提供快速访问和操作功能。
Ribbon通常包含标签(Tab)、分组(Group)和按钮(Button)等元素,用户可以通过单击这些元素来执行所需的操作。
Ribbon的用法主要包括以下几个方面:
1. 切换标签:Ribbon通常有多个标签,用户可以单击标签来切换到不同的功能区域。
例如,在Word中,用户可以单击“插入”标签来访问插入相关的功能。
2. 执行命令:Ribbon上的按钮可以用于执行各种命令,例如打开文件、保存文件、剪切、复制、粘贴等。
用户可以单击按钮来执行所需的命令。
3. 自定义Ribbon:某些应用程序允许用户自定义Ribbon,使其更符合个人需求。
用户可以添加、删除或重新排列标签、分组和按钮,以创建自己的Ribbon。
4. 使用快捷键:除了单击Ribbon上的按钮外,用户还可以使用快捷键来执行命令。
每个按钮都有一个快捷键,用户可以按下相应的组合键来执行命令,例如Ctrl+C表示复制。
5. 查看帮助文档:Ribbon通常包含一个帮助按钮,用户可以单击该按钮来访问帮助文档,了解如何使用特定功能。
总之,Ribbon是一个方便的用户界面元素,可以大大提高应用程序的易用性和效率。
通过了解Ribbon的用法,用户可以更好地利
用这个功能来完成各种任务。
一、环境:操作系统:Win7开发工具:Visual Studio 2010.NET版本:4.0开发语言:C#下载makeCAB压缩包,这里面包含了制作数字签名和制作cab的几个exe程序保存路径:D:\makeCAB需要编辑的系统环境变量设置:(下面的系统变量)这样做是为了方便后面在cmd里调用。
二、编写ActiveX控件1、创建一个新的Windows窗体控件库2、重命名UserControl1.cs 为HelloDanielActiveX.cs3、拖1个GroupBox和2个Label控件到界面上4、为控件添加一个方法,用来设置Label中显示当前时间#region Javascript调用ActiveX的方法// 设置当前时间public void SetTime(string timeStr){bel2.Text = timeStr;}#endregion5、新建一个接口下面是这个接口的代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace HelloDaniel{[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]public interface IObjectSafety{[PreserveSig]int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions,[MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);[PreserveSig()]int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask,[MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);}}6、在控件中实现这个接口关于实现这个接口,篇幅较长,可以在这篇文章找到:/default.aspx/Interfaces/IObjectSafety.html7、为控件添加Guid、ProgId和ComVisible属性Guid的获得应该是这样的:点击复制,然后将你得到的Guid号Copy下,粘贴到下面代码里面。
创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数。
MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理。
比如我们点击按钮时就会产生BN_CLICKED消息,修改编辑框内容时会产生EN_CHANGE消息等。
一般为了让某种操作达到效果,我们只需要实现某个消息的消息处理函数。
一.添加消息处理函数鸡啄米仍以前面的加法计算器的程序为例,说明怎样为“计算”按钮控件添加消息处理函数。
添加方法列出4种:1.使用Class Wizard添加消息处理函数用过的VC++ 6.0的朋友应该对Class Wizard很熟悉了,添加类、消息处理函数等经常会用到它,可以说是一个很核心的功能。
但从VS2002开始就见不到Class Wizard了,大部分功能都集成到对话框和控件等的属性中了,使用很方便。
到VS2010,久违的Class Wizard又回来了。
但鸡啄米已经习惯了使用属性中的功能了,对于从VC++ 6.0直接转V S2010的朋友可能觉得还是使用Class Wizard比较习惯。
大家应该记得,“计算”按钮的ID为IDC_ADD_BUTTON,上图中Commands标签下,Oject IDs列表中有此ID,因为我们是想实现点击按钮后的消息处理函数,所以在Messag es列表中选择BN_CLICKED消息,然后点右上方的Add Handler就可以添加BN_CLICK ED消息处理函数OnClickedAddButton了。
当然你也可以改名,但一般用的默认的就可以。
2.通过“Add Event Handler...”添加消息处理函数在“计算”按钮上点右键,然后在右键菜单中选择菜单项“Add Event Handler...”,弹出“E vent Handler Wizard”对话框,如下图:可见“Message type”中默认选中的就是BN_CLICKED消息,函数名和所在类都已经自动给出,直接点“Add and Edit”就可以了。
vs2010使用技巧VS2010使用技巧Visual Studio 2010是一款强大的集成开发环境(IDE),被广泛用于开发各种类型的应用程序。
以下是一些帮助您更有效地使用VS2010的技巧和建议。
1. 快捷键:熟练使用快捷键可以大幅提高编码效率。
VS2010提供了许多常用操作的快捷键,例如Ctrl + S保存,Ctrl + Z撤销,Ctrl + Y重做,Ctrl + F查找等等。
您可以在菜单栏中的“工具”>“自定义”>“键盘”中查看和自定义快捷键。
2. 自动完成:VS2010具有强大的自动完成功能,它可以帮助您编写代码并提供预测的建议。
当您键入代码时,可以按下Tab键来接受自动完成的建议,并加快编码速度。
3. 编码提示:VS2010可以根据上下文提供编码提示。
例如,当您键入一个对象的名称后面的点号时,VS2010将显示该对象可用的方法和属性列表。
使用编码提示可以避免拼写错误,并帮助您更快地找到所需的代码。
4. 代码导航:在大型的项目中,快速浏览代码和导航至不同部分是一项重要的技能。
在VS2010中,您可以使用“查找和替换”对话框(快捷键Ctrl + F)来查找特定的代码。
此外,您还可以使用“导航到”菜单(快捷键Ctrl + ,)来浏览和跳转至定义、引用和实现等位置。
5. 调试功能:VS2010提供了强大的调试功能,可帮助您快速诊断和修复代码中的问题。
您可以设置断点来暂停程序执行并检查变量的值,可以使用“调试窗口”查看输出和堆栈跟踪等信息。
了解如何有效使用调试功能可帮助您更快地找到和解决问题。
6. 解决方案资源管理器:解决方案资源管理器是VS2010中的一个重要工具,它可以帮助您组织和管理项目文件。
您可以使用解决方案资源管理器来浏览项目结构,添加、删除和重命名文件,创建文件夹等操作。
此外,还可以使用“搜索”功能在解决方案中查找特定的文件。
7. 版本控制:VS2010集成了各种版本控制系统,如Git和SVN等。
ribboncontrol用法ribboncontrol是一种常用的图形用户界面控件,被广泛应用于各种软件和应用程序中。
它的出现,为用户提供了一种直观、易用的界面交互方式,大大提高了软件的可用性和易用性。
本文将详细介绍ribboncontrol的用法和优势,并探讨它在不同领域的应用。
我们来了解一下ribboncontrol的基本概念和特点。
ribboncontrol是一种以标签和按钮组织的图形用户界面控件,通常出现在应用程序的顶部。
它由多个标签组成,每个标签代表一个功能区域,标签中含有多个按钮,按钮用于触发不同的命令或操作。
通过点击不同的按钮,用户可以快速访问和执行所需的功能。
ribboncontrol的设计灵感源自Microsoft Office系列软件,它的界面风格简洁明了,符合用户的直观认知习惯,可以大大提高用户使用软件的效率。
ribboncontrol的用法非常灵活多样,可以根据具体的软件需求进行定制。
例如,在办公软件中,可以将各种常用的功能区域进行分类,如文件、编辑、格式、视图等;在图像处理软件中,可以将涉及到的工具分类,如裁剪、调整颜色、添加滤镜等。
每个标签下的按钮可以分组,根据功能的不同进行分类,从而使得用户可以更快速地找到所需的功能。
ribboncontrol还支持自定义按钮样式和图标,可以根据软件的设计风格进行个性化设置,使得软件的界面更加美观和吸引人。
ribboncontrol的使用不仅对用户有很大的帮助,同时也方便了开发者对软件的功能进行管理和维护。
通过ribboncontrol,开发者可以将软件的各种功能模块分组展示,更好地对软件的功能进行管理。
对于大型软件系统来说,功能模块通常非常庞杂,通过ribboncontrol可以将这些功能模块进行分类,使得用户可以直观地找到所需的功能,提高软件的易用性和用户的满意度。
另外,由于ribboncontrol的界面组织结构清晰,开发者可以更加方便地对软件进行扩展和功能的增删改查,极大地提高了软件的可维护性和可扩展性。
ribboncontrolslibrary的使用方法RibbonControlsLibrary是一个用于创建和管理Windows下Ribbon风格的用户界面的开源库。
它是WPF里面的扩展类库,提供了一系列的控件和样式,方便开发者用于创建符合Ribbon风格的应用程序。
本文将介绍RibbonControlsLibrary的使用方法。
首先,我们需要在项目中引用RibbonControlsLibrary。
你可以从GitHub上下载最新的源代码,或者通过NuGet包管理器直接安装。
一旦引用了RibbonControlsLibrary,我们就可以开始使用其中提供的控件和样式了。
下面是一些常用的控件和样式的介绍。
1. Ribbon控件Ribbon控件是RibbonControlsLibrary中最重要的控件之一,它用于创建Ribbon风格的用户界面。
你可以通过以下代码在XAML中创建一个Ribbon控件:```xml<r:Ribbon><!--标题--><r:Ribbon.QuickAccessToolBar><r:QuickAccessToolBar><r:Button Command="{Binding NewCommand}" SmallImageSource="Images/new.png"LargeImageSource="Images/new_large.png" Label="新建" /> <r:Button Command="{Binding OpenCommand}" SmallImageSource="Images/open.png"LargeImageSource="Images/open_large.png" Label="打开" /> </r:QuickAccessToolBar></r:Ribbon.QuickAccessToolBar><!--标签--><r:RibbonTabItem Header="文件"><r:RibbonGroup Header="操作"><r:Button Command="{Binding SaveCommand}" SmallImageSource="Images/save.png"LargeImageSource="Images/save_large.png" Label="保存" /> <r:Button Command="{Binding SaveAsCommand}" SmallImageSource="Images/save_as.png"LargeImageSource="Images/save_as_large.png" Label="另存为" /> </r:RibbonGroup></r:RibbonTabItem><!--更多标签... --></r:Ribbon>```在上面的代码中,我们创建了一个Ribbon控件,并添加了一个快速访问工具栏和一个标签。
visual studio中selectedindexchanged在Visual Studio 中,`SelectedIndexChanged` 是一个事件,通常与控件(如ComboBox、ListBox 等)的选中项发生变化时触发。
以下是关于`SelectedIndexChanged` 事件的一些重要信息:1. 事件说明:`SelectedIndexChanged` 事件在控件的选中项发生变化时触发。
这通常发生在用户选择了不同的项,或者通过编程方式改变了选中项。
2. 常用控件:该事件常常与类似ComboBox(下拉框)或者ListBox(列表框)等控件关联。
当用户在这些控件中选择不同的项时,就会触发`SelectedIndexChanged` 事件。
3. 处理方式:你可以在Visual Studio 的设计器中为相应的控件添加事件处理器,也可以在代码中手动订阅该事件。
在事件处理器中,你可以编写代码响应选中项的变化,执行相应的逻辑。
下面是一个简单的C# 示例,展示了如何在代码中订阅`SelectedIndexChanged` 事件:```csharpprivate void comboBox1_SelectedIndexChanged(object sender, EventArgs e){// 选中项发生变化时的处理逻辑// 可以通过sender 对象获取相关信息// 例如:ComboBox comboBox = (ComboBox)sender;// string selectedValue = comboBox.SelectedItem.ToString();// // 执行其他逻辑...}```在上述示例中,`comboBox1_SelectedIndexChanged` 方法是事件处理器,它将在`comboBox1` 控件的选中项发生变化时被调用。
在Visual Studio 中,你可以通过以下步骤添加事件处理器:1. 打开设计视图。
vs2010显⽰未能完成操作。
ClassFactory⽆法供应请求的类的错
误及解决⽅法
VS2010碰到奇怪错误:
在VS2010中打开项⽬,以及添加现有项⽬时候会显⽰⼀个如下的错误信息
The operation could not be completed. ClassFactory cannot supply requested class
"未能完成操作。
ClassFactory ⽆法供应请求的类"的错误及解决⽅法
查了⼀个下午,把VS2010+SP1重新安装,以及把OS系统还原都不顶事⼉。
最后在stackoverflow找到了答案
原来是vs2010启动程序的属性选项中的[兼容性]的[禁⽤视觉主题]给打上了钩⼦。
解决⽅法:
如上图所⽰,把属性中的[禁⽤视觉主题]设置为False,然后重新启动VS2010。
这类错误⽐较稀少,⼀旦发⽣处理起来还是⽐较⿇烦的。
相关信息链接:。
上篇我们说到如何利用XML文件定义和描述Ribbon界面,从分工的意义上讲,其实那是UI设计师的活儿。
作为程序员,更加专注的是如何对Ribbon控件的消息进行响应,完成相应的业务逻辑。
现在,该轮到程序员上场了!在Ribbon界面编辑完成的基础上,我们来看看如何利用Windows Scenic Ribbon API处理各种控件消息,让Ribbon界面真正地投入使用。
在前面一篇文章中,我们讨论了如何利用XML文件创建Ribbon控件,对控件进行排布和设置控件的缩放策略等等,可以说,这些工作都是UI设计师的任务。
对程序员来说,更重要的是对控件的消息进行处理实现其业务逻辑。
添加消息处理功能大家应该还记得,在本系列前面的文章中,我们创建了一个派生自IUIApplication的Ribbon界面宿主对象类CApplication,并利用这个类完成了Ribbon界面的创建,初始化以及与Windows应用程序的集成。
要对Ribbon控件的消息进行处理,我们还是要借助这个宿主对象类。
为了使得CApplication类具有控件消息处理的能力,我们需要修改它的定义,让它同时也从IUICommandHandler派生。
而IUICommandHandler类,则是Scenic Ribbon API 提供给我们的控件消息处理类,只要CApplication从这个类派生,就具有了相应的控件消息的处理能力。
为了对控件消息进行处理,我们修改CApplication类的定义如下:// 引入Scenic Ribbon API的头文件#include <uiribbon.h>// 引入编译生成的资源头文件#include "ribbonres.h"// 调用Windows API获得系统时间#include "windows.h"#include "stdio.h"IUIFramework* g_pFramework = NULL;// Ribbon界面宿主程序class CApplication: public CComObjectRootEx<CComMultiThreadModel>, public IUIApplication // 处理Ribbon界面的创建和初始化, public IUICommandHandler // 处理Ribbon控件的消息然后,我们需要利用COM_INTERFACE_ENTRY宏定义COM_MAP,在CApplication 类的定义中,添加:public:BEGIN_COM_MAP(CApplication)COM_INTERFACE_ENTRY(IUIApplication)COM_INTERFACE_ENTRY(IUICommandHandler)END_COM_MAP()这样,Ribbon控件的消息就会发送到CApplication类,由CApplication类进行处理。
在整个Scenic Ribbon API中,Ribbon控件消息的处理流程如下图所示。
除了之前我们介绍的跟Ribbon界面创建和初始化相关的过程之外,为了完成控件消息,我们首先需要为感兴趣的控件进行注册,这些工作都会在OnCreateCommand函数中完成。
完成控件的注册后,当我们需要进行消息处理的控件有消息发生时,IUIFramework就会将这些消息发送给CApplication,而我们就可以在CApplication类中对具体的消息进行处理。
Ribbon控件的消息主要分成两种:一种是来自控件的动作消息,比如按钮控件被点击,ComboBox的选择发生了变化等。
这类消息都在Execute函数中进行处理;另外一种是则对控件属性进行更新的消息,这类消息在UpdateProperty函数中进行处理。
注册感兴趣的控件按照Ribbon界面控件消息的处理流程,我们首先需要在OnCreateCommand 函数中为我们感兴趣的控件进行注册,这样当控件有动作发生的时候,CApplication类才会收到相应的控件消息,进而可以对其进行处理。
在CApplication类的OnCreateCommand函数中,我们完成相应控件的注册:STDMETHOD(OnCreateUICommand)(UINT32 nCmdID, __in UI_COMMANDTYPE typeID, __deref_out IUICommandHandler** ppCommandHandler){// 对相应控件的消息进行注册if (nCmdID == cmdMyButton|| nCmdID == cmdDeleteTable|| nCmdID == cmdAddTable|| nCmdID == cmdPrintRelationships){return QueryInterface(IID_PPV_ARGS(ppCommandHandler));}return E_NOTIMPL;}在这段代码中,我们根据控件的Symbol选取了几个需要进行消息处理的控件,当这几个控件有动作发生时,比如比鼠标点击,或者是进行了选择,IUIFramework 会发送相应的消息给宿主对象CApplication,从而让我们可以有机会对这些消息进行处理。
处理控件消息对于普通的控件点击消息或者是选择消息等动作消息,我们需要重写CApplication类的消息处理函数Execute函数,在其中对消息进行处理:// 消息处理函数STDMETHODIMP Execute(UINT nCmdID,UI_EXECUTIONVERB verb,__in_opt const PROPERTYKEY* key,__in_opt const PROPV ARIANT* ppropvarValue,__in_opt IUISimplePropertySet* pCommandExecutionProperties){HRESULT hr = S_OK;switch (verb){// 只处理感兴趣的消息类型case UI_EXECUTIONVERB_EXECUTE:// 判断消息来源if (nCmdID == cmdMyButton){// 执行具体的业务逻辑// 这里我们获得系统时间并进行输出SYSTEMTIME sys;GetLocalTime( &sys );wchar_t strInfo[256] = L"";wsprintf( strInfo, L"当前系统时间:%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);// 显示消息框MessageBox(NULL, strInfo,L"当前系统时间”,MB_OK);}break;}return hr;}现在编译运行这个解决方案,当我们点击cmdMyButton 所对应的“MyButton”这个按钮时,就可以得到一个消息框报告当前的系统时间。
当然,我们这里只是对按钮控件的动作进行处理,对于其他类型控件的消息处理,都是按照相同的流程进行。
在运行时对控件属性进行修改在某些情况下,我们需要在运行时对控件的属性进行修改。
例如,在应用程序运行的某种状态下,我们可能需要禁用某些控件,或者是修改控件的标签文本,图标等等。
对控件属性的修改,可以通过直接修改控件属性达到,也可以通过调用InvalidateUICommand函数刷新控件的属性,然后在UpdateProperty函数中进行控件属性更改消息处理,实现具体的属性修改。
下面我们分别来看看这两种方式是如何进行的。
在这个例子中,我们处理两个按钮控件的点击消息,让他们分别禁用另外的按钮控件和修改按钮的标签文本。
在Execute函数中,处理相应的按钮消息,实现控件属性的改变:STDMETHODIMP Execute(UINT nCmdID,UI_EXECUTIONVERB verb,__in_opt const PROPERTYKEY* key,__in_opt const PROPV ARIANT* ppropvarValue,__in_opt IUISimplePropertySet* pCommandExecutionProperties){HRESULT hr = S_OK;switch (verb){case UI_EXECUTIONVERB_EXECUTE:if (nCmdID == cmdMyButton){//PROPV ARIANT varNew;BOOL _fEnabled = FALSE;// 初始化属性值hr = UIInitPropertyFromBoolean(UI_PKEY_Enabled,_fEnabled, &varNew);if (FAILED(hr)){return hr;}// 为控件cmdDeleteTable设置新的属性值hr = g_pFramework->SetUICommandProperty(cmdDeleteTable,UI_PKEY_Enabled, varNew);if (FAILED(hr)){return hr;}}else if (nCmdID == cmdAddTable){// 发送属性更新消息对控件属性UI_PKEY_Label进行更新hr = g_pFramework->InvalidateUICommand(cmdPrintRelationships,UI_INV ALIDATIONS_PROPERTY, &UI_PKEY_Label);if (FAILED(hr)){return hr;}}break;}return hr;}在cmdMyButton按钮的消息处理中,我们使用SetUICommandProperty就可以直接修改控件的属性了。
在这里,我们通过设置cmdDeleteTable按钮控件的UI_PKEY_Enabled属性为FALSE,达到了禁用这个控件的目的。
而在cmdAddTable按钮的消息处理中,我们只是调用了IUIFramework的InvalidateUICommand函数,这表示它会自动调用CApplication类的UpdateProperty来实现控件属性的更新,所以对于第二种方式,我们还需要实现这个函数,在其中完成属性的更新:STDMETHODIMP UpdateProperty(UINT nCmdID,__in REFPROPERTYKEY key,__in_opt const PROPV ARIANT* ppropvarCurrentValue,__out PROPV ARIANT* ppropvarNewValue){UNREFERENCED_PARAMETER(ppropvarCurrentValue);HRESULT hr = E_FAIL;if (key == UI_PKEY_Label){// 更新控件cmdPrintRelationships的标签文本if (nCmdID == cmdPrintRelationships){hr = UIInitPropertyFromString(UI_PKEY_Label,L"New Label", ppropvarNewValue);}}return hr;}现在,我们就可以编译运行整个解决方案,点击相应的按钮控件,就可以看到对控件属性修改的效果了:图3 修改控件属性到这里,我们完成了整个Ribbon历程:从创建XML文件到添加宿主对象,从创建到初始化,从控件消息处理到控件属性更新。