基于Windows-7中的-Ribbon开发技术应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于Windows7中的Ribbon开发技术应用Windows7的画图工具采用了微软所称的ScenicRibbon界面,这种界面起初是在Office2007中出现的,也在WordPad出现过。虽然很多用户还在抱怨“不习惯Ribbon界面”、“很多功能找不到位置”等等,但是,随着微软的“强制”推行,Ribbon界面也在越来越被人们所接受,很多应用软件也开始采用Ribbon界面。更重要的是,在即将到来的Windows7中,操作系统本身更是大量地应用了Ribbon界面。不管我们愿意或者不愿意,Ribbon界面开始大张旗鼓地攻占我们的软件界面,成为继下拉式菜单后新的标准用户界面。作为用户,我们需要逐渐熟悉这种新的软件用户界面;而作为开发者,更是需要了解和认识这种新的软件用户界面,新的交互方式,从而利于这种新界面的优势,为用户提供更加优秀的软件。“Ribbon来了!”为了支持开发人员,微软正在确保其设备驱动程序和应用模式在Vista和Windows7之间不变,以确保其兼容性。但是公司正在努力工作使开发人员接触Windows7的新技术,以使他们能够在他们自己的解决方案中应用一些新的高级特性。这包括诸如JumpLists,PowerShell(《WindowsPowershell应用编程最佳实践》此书我正在编写中6月左右出版),“画图”的ScenicRibboncontrol以及写字板,以及其它的组件。在Office2007之后介绍了这个ScenicRibbon.许多昂贵的商业解决方案都已经用到它。但最后,在即将推出的windows7,微软推出了ScenicRibbon.在这里我第一次尝试在实例中使用从而在这里讲解出来。ScenicRibbon是一个在ActiveX对象附加在窗口上,它的整个宽度的窗口,它的高度可配置的。它的尺寸会根据你的需要而调整。Ribbon从一个XML中获得显示数据。这意味着您只使用几个函数调用,一些初始化并加载数据,以及一个意外事件处理程序触发Ribbon。由于Ribbon是一个ActiveX界面,应用程序在XP或Vista下使用会初始化失败,但它会继续运行。当创建的XML时,运行intentcl.exe程序,创建项目工程文件。•创建一个IUIFrameworkIUIFramework*u_f=0;HRESULThr=CoCreateInstance(CLSID_ScenicIntentUIFramework,0,CLSCTX_ALL,__uuidof(IUIFramework),(void**)&u_f);•执行一个IUIApplication这个界面(除了IUnknown成员)有以下三个功能:1、当一个命令创建时调用ribbon:virtualHRESULT__stdcallOnCreateUICommand(UINT32commandId,UI_COMMANDTYPEtypeID,IUICommandHandler**commandHandler);2、当ribbon被一个命令是释放时:virtualHRESULT__stdcallOnDestroyUICommand(UINT32commandId,UI_COMMANDTYPEtypeID,IUICommandHandler*commandHandler);3、当ribbon变化时,视图也被相应的改变:virtualHRESULT__stdcallOnViewChanged(UINT32viewId,UI_VIEWTYPEtypeID,IUnknown*view,UI_VIEWVERBverb,INT32uReasonCode);•调用IUIFramework::Initialize()与父窗口的ribbon,和执行IUIApplication。•调用IUIFramework::LoadUI()与HINSTANCE和资源名称。下面的图解释了需要采取的步骤,以实现一个简单的Ribbon应用。命令处理程序OnCreateUICommand是调用每一个命令。看看下面的命令是XML格式。必须返回一个执行IUICommandHandler(AddRef()+!)将处理命令两个成员函数:HRESULT__stdcallUpdateProperty(UINT32commandId,REFPROPERTYKEYkey,constPROPVARIANT*currentValue,PROPVARIANT*newValue);当命令调用执行时。这个“verb”是UI_EXECUTIONVERB枚举,并通知您,触发什么样的事件,例如,字体选择下拉,一个按钮按下等使用OnDestroyUICommand时,将没有必要了调用接口,但不调用Release()。Ribbon将调用它。这只是通知你的目的是要被销毁,而不是请求释放它自己。nViewChanged允许从IUIFramework和查询其状态请求一个接口。如果typeId==UI_VIEWTYPE_RIBBON和verb==UI_VIEWVERB_CREATE或UI_VIEWVERB_SIZE例如,这会告诉你,ribbon创建或改变大小,这样你就可以查询IUnknown指IUIRibbon并获得其预期的高度。为了避免上述所有的问题,把这些接口包装到类库。一个RIBBON类,并且你使用如下:RIBBON(HWNDhh=0);~RIBBON();boolInitialize();Ribbon初始化成功返回TureboolLoadMarkup(HINSTANCEhInst,LPCWSTRresourceName);Ribbon初始化成功返回TureboolLoadMarkup(HINSTANCEhInst,LPCWSTRresourceName);从资源里加载ribbon,如果现有的ribbon被加载,则释放它。voidDestroyMarkup();销毁加载的ribbon。int&DesiredHeight();返回理想高度ribbonvoidSetHeight(int);允许设置ribbon高度调用类库向父窗口发送一个预定义的MESSAGE_RIBBON(constintMESSAGE_RIBBON=RegisterWindowMessage(L{E733E4DA-904C-486b-B5FB-6201773D69DE});),与WPARAM设置为RIBBON*类,和LPARAM设置为RIBBON_MESSAGE结构:structRIBBON_MESSAGE{IUIFramework*u_f;//PointertotheIUIFrameworkoftheribbonUINT32cmd;//CommandIDUINT32reason;//Reasoncode(WhenViewischanged)UI_COMMANDTYPEtype;//TypeofthecommandUI_VIEWTYPEvtype;//VerbTypeoftheviewchange(WhenViewischanged)UI_VIEWVERBvverb;//Verboftheviewchange(WhenViewischanged)UI_EXECUTIONVERBverb;//VerbofthecommandconstPROPERTYKEY*key;//ContainsthenewvalueconstPROPVARIANT*cv;//ContainsthecurrentvalueIUISimplePropertySet*pset;//Containsaninterfacewhichyoucanset/queryvaluesvoid*view;//ContainsanIUnknown*oftheviewinterface//(whenviewischanged)whichyou//canusetoqueryforanIUIRibbon.boolupdate;//trueifviewischanged.};因此,如果您只是想重定向消息到WM_COMMAND,您检查update==false,erb==UI_EXECUTIONVERB_EXECUTE,和type==UI_COMMANDTYPE_ACTION。LRESULTCALLBACKMain_DP(HWNDhh,UINTmm,WPARAMww,LPARAMll){if(mm==MESSAGE_RIBBON){RIBBON_MESSAGE*rm=(RIBBON_MESSAGE*)ll;if(!rm)if(rm-update==false&&rm-verb==UI_EXECUTIONVERB_EXECUTE&&rm-type==UI_COMMANDTYPE_ACTION)SendMessage(hh,WM_COMMAND,rm-cmd,0);}}分析Ribbon的XML数据格式由于ribbon本质上是一个代表性的一个XML地图,在这里您将实际花费大部分的时间来制定一个好的和工作ribbon.。ribbon基本要素:一套命令,每个人可以有一个ID,一个符号,一个标签,一个提示,和一套图像。您定义这些命令为“按钮”和其他因素,如标签或一组标签。一套要素,包括一个“应用程序的菜单”,一个“快速访问工具栏”“ribbon”,其中载有一些标签。每个标签可以有一些组,每个组都可以有一些预定义的控制。这些组都必须标明具体的“大小”和布局;所以举例来说,如果你想说,6组内的按钮,你只有三种预定义的方式,安排他们。这里是一组实例命令:CommandName=cmdNewLabelTitle=NewSymbol=cmdNewComment=NewId=22001TooltipTitle=TooltipTitleTooltipDescription=TooltipTextCommand.SmallImagesImage1-32a.bmp/Image/Command.SmallImagesCommand.LargeImagesImage1-32a.bmp/Image/Command.LargeImages/CommandCommandName=cmdOpenLabelTitle=OpenSymbol=cmdOpenComment=OpenId=22002/CommandName=cmdSaveLabelTitle=SaveSymbol=cmdSaveComment=SaveId=22003/CommandName=Tab1LabelTitle=FirstTabSymbol=_44Id=30001/CommandName=Tab2LabelTitle=SecondTabId=30002/CommandName=cx1LabelTitle=CheckBox1/CommandName=Font1LabelTitle=FontSelection1/CommandName=cpick1LabelTitle=ChooseColor/CommandName=cmdn1LabelTitle=MainMenu/CommandName=g1LabelTitle=Group1/请注意,“按钮”命令,将需要的图片(小16x16,或大32x32,或64x64点英寸,但我已经发现,ribbon大的图像调整得很好),但其他的“命令”像标签标或一组标签只需要姓名和头衔,因为没有命令编号与他们有联系的。以下是如何创造一个“应用程序的菜单”:Ribbon.ApplicationMenuApplicationMenuCommandName=cmdn1MenuGroupClass=MajorItemsButtonCommandName=cmdNew/ButtonCommandName=cmdOpen/ButtonCommandName=cmdSave//MenuG

1 / 90
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功