让你的软件界面更漂亮(五)

让你的软件界面更漂亮(五) ――完美类WindowXp 开始菜单(CYisongStartMenu) 编程指南 作者:朱一松

下载源代码

类WindowXp 开始菜单到现在基本上是完美实现,在功能上基本和WindowXp 与Vista 操作系统的开始菜单一样,界面当然漂亮,通过编程能实现风格多样,具有个性化的功能菜单。为了方便使用,本人对其进行了封装,库名曰:完美类WindowXp 开始菜单。 1、完美类WindowXp 开始菜单(CYisongStartMenu)有如下主要特点:    a. 在C++环境实现,界面风格可实现自定义;    b. 不仅适用Mouse 操作,还支持响应方向按键,快捷键功能;    c. 可增加和删除菜单中的子项;    d. 可显示Left Bar 并定义其风格;    e. 可自定义焦点亮条的风格;    f. 可设置菜单子项为Check Option 风格 2、完美类WindowXp 开始菜单的用途:    a. 可实现WindwXp 的两种菜单,经典菜单和分组菜单,非常适在大型应软件。象QQ 的 主菜单就是其中之一的分组菜单    b. 托盘菜单、右键快捷菜单等应用。

一、编程指南 1.文件说明类文件:YisongStartMenu.dll YisongStartMenu .lib (开始菜单库) 其它文件:MyStartMenuLib.h,MyStartMenu.h ,CmyToolTipCtrl.h 2.CYisongStartMenu 用法    a. 先把上述文件拷贝到工程目录下    b. #include MyStartMenuLib.h ,只要把MyStartMenuLib.h 文件包括到工程文件中就OK    c. 定义一变量:CYisongStartMenu m_StartMenu;    d. 在.cpp 文件中现实代码

//主菜单初始化过程
	  _TextInfo textInfo; //定义主菜顶部文本信息结构
	  m_StartMenu.GetUserPaneTextInfo(textInfo);//获取文本信息的初始属性
	  textInfo.clrShadow = GetSysColor(COLOR_BTNSHADOW);//设文本信息的主要属性
	  textInfo.nOffsetX = 1;
	  textInfo.nOffsetY = 1;
	  textInfo.logFontUserText.lfItalic = TRUE;
	  m_StartMenu.SetUserPaneTextInfo(textInfo); //使设置有效
	  m_StartMenu.SetUserPaneText(_T("WindowXp Menu")); //设置主菜顶部标题
	  m_StartMenu.SetUserPaneIcon(IDI_ICON_QQ,CSize(48,48)); //设置主菜顶部显示图标
	  //设置主菜顶部显示图形
	  m_StartMenu.GetUserBitmap(0,".//skin//1.bmp");
	  m_StartMenu.GetUserBitmap(1,".//skin//2.bmp");
	  m_StartMenu.GetUserBitmap(2,".//skin//3.bmp");
	  //实现菜单菜项的添加(左边主程序项的添加)
	  m_StartMenu.AppendProgItem(_T("Internet/nInternet Explorer"), ID_PROGLIST_IE,0,
		  MENU_DEFAULT,IDI_ICON_IE,NULL,_T("联接国际互际联网页"));
	  m_StartMenu.AppendProgItem(….)
	  ….
	  m_StartMenu.AppendProgItem(_T("所有程序"),IDR_MENU_TEST,0,
		  MENU_BOTTOM|MENU_POPUP,0,NULL,NULL,&m_wndSubMenu);
	  // m_wndSubMenu 为“所有程序”菜单项的下拉子菜单
	  //实现菜单项的添加(分组菜单右边的菜单子项的添加)
	  //和上面方法一样,只不过是用函数AppendProgItem()
	  m_StartMenu. AppendPlaceItem(_T("My Documents"),
		  ID_PLACELIST_MYDOCUMENT,0,MENU_DEFAULT,
		  IDI_ICON_MYDOCUMENT);
	  …..
	  m_StartMenu. AppendPlaceItem(….);
	  //设置菜单子项文本颜色, PLACELIST_TYPE 指Place List 子项颜色
    //PROGLIST_TYPE指Prog List(左边列表)子项颜色
	  m_StartMenu.SetItemTextColor(PLACELIST_TYPE,RGB(0,255,0));
	  //设置子项有焦点时,其显示的亮条图形,不设置亮条为蓝色
	  m_StartMenu.SetItemFoucsBitmap(PLACELIST_TYPE,".//skin//OverFoucs.bmp")
	  //设置菜单底部属性
	  CImageList lst;
	  lst.Create(IDB_STARTPANE_BUTTONS,24,3,RGB(192,192,192));
	  HICON hIconTurnOff = lst.ExtractIcon(2);
	  m_StartMenu.AppendBottomItem(_T("Turn Off Computer"),
	  ID_BOTTOMBAR_TURNOFFCOMPUTER,
	  0,MENU_NORMAL,0,hIconTurnOff);
	  HICON hIconLogOff = lst.ExtractIcon(1);
	  m_StartMenu.AppendBottomItem(_T("Log Off"),ID_BOTTOMBAR_LOGOFF,
	  0,MENU_NORMAL,0,hIconLogOff);
	  //设置菜单底部显的背景图形。
	  m_StartMenu.GetBottomBarBitmap(0,".//skin//1.bmp");
	  m_StartMenu.GetBottomBarBitmap(1,".//skin//2.bmp");
	  m_StartMenu.GetBottomBarBitmap(2,".//skin//3.bmp");
	  …..
   e. 显示菜单方法
        //空口中在某点(x,y)处显示,作为m_hWnd 的子窗口
		  m_StartMenu.TrackPopPane(point.x, point.y, m_hWnd, 0);
   f. 响应菜单菜单命令在用AppendPlaceItem()或AppendProgItem()、AppendBottomItem()添加菜单子项时它们第二个参数为菜单项的ID。在响应每个子项mouse 单击事件时,会向菜单其父窗口发送WM_COMMAND 消息,
::SendMessage(m_hWndParent,WM_COMMAND,m_pCurrentItem->uID,0)
所以只要在主窗口为每个菜单项映谢消息ON_COMMAND 的函数函行了,方法是在cpp 文件中找到消息息映射处( 在BEGIN_MESSAGE_MAP(CWindowsXPMenuDlg, CDialog) 和END_MESSAGE_MAP()之间)。添加如下代码:
ON_COMMAND(ID_MENUITEM,OnFunc)
在.h 头文件对OnFunc()函数声明为消息函数:
afx_msg void OnFunc();

在OnFunc()函数中实现菜单项的命令的功能

二.主要功能接口函数的说明 1.函数名:AppendProgItem()    功能:添加主程序功能菜单项    原型及参数说明:

void AppendProgItem(LPCTSTR szItemName,
			    UINT uID,
			    ULONG ulData,
			    UINT uFlags,
			    UINT uIconResID,
			    HICON hIcon = NULL,
			    LPCSTR szTooltip=_T(""),
			    CYisongStartMenu* pSubMenu = NULL);
szItemName:菜单项文本标题 uID:菜单项ID 标识 ulData: 保留 uFlags: 菜单风格定义,其值可为下列值或组合
AppendProgItem(_T(""),0,0,MENU_SEPARATOR,0);
AppendPlaceItem(_T(""),0,0,MENU_SEPARATOR,0);
与本功能相同用的函数还有AppendPlaceItem(),用法上完全一样。

 

2.函数名:SetProgItemBackColor()    功 能:设置菜单列表背景颜色    原型及参数说明:

void SetProgItemBackColor(COLORREF clrLeftTop,

			  COLORREF clrRightBottom,

			  bool bValid)

clrLeftTop:左上角的颜色 clrRightBottom:右下角结束处 颜色 bValid:布尔型变量,TRUE,表示立即设置生效。说明:SetProgItemBackColor()函数的用法及功能与本函是一样的,请参照此用法。

3.函数名:SetItemTextColor(ITEM_TYPE nType,COLORREF clrText)    功 能:设置菜单文本颜色    原型及参数说明:

void SetItemTextColor(ITEM_TYPE nType,COLORREF clrText)
nType :ITEM_TYPE 枚举类型的数参
enum ITEM_TYPE
			  {
			  PROGLIST_TYPE, //指Program 列表菜单
			  PLACELIST_TYPE, //指Place 列表菜单
			  BOTTOMBAR_TYPE, //菜单底部
			  }

clrText:本文的颜色设置 Program 列表菜单项的文本颜色为 红色的方法如下: Exp.: SetItemTextColor(PROGLIST_TYPE, RGB(255,0,0)); 注意:一般在菜单初始完成后调用该函数来设置菜单项的文本颜色。

4.函数名:GetBottomBarBitmap()    功 能:设置菜单底部背景图象    原型及参数说明:void GetBottomBarBitmap(int nMode,LPTSTR szFile)) nMode :指出显示方式 szFile : 图像文件及路径。与些函数功能相同的还有GetUserBitmap(int nMode,LPTSTR szFile) 5.函数名:SetAsSubMenu()    功 能:设置菜单为弹出(子)菜单    原型及参数说明:void SetAsSubMenu(BOOL bSubmenu) bSubmenu =TRUE 时,表示为弹出(子)菜单。如上图的 TEST 菜单 6.函数名:SetItemFoucsBitmap(ITEM_TYPE nType,LPTSTR strFile)    功 能: 设置菜单项的焦点高亮显示方式    原型及参数说明:void SetItemFoucsBitmap(ITEM_TYPE nType,LPTSTR strFile) nType:参考上面介始 strFile:焦点高亮显示图形,为NULL 则显示默认的高亮条 注意:一般在菜单初始完成后调用该函数可设定不同的焦点亮条风格,上图显示两种亮条不同风格的焦点亮条。当亮条风格不能满足你的要求时,还可设定自已喜欢的图形作为焦点亮条。对亮条图形任意尽寸大小都适合。也可看到上图下拉菜单的Left Bar 风格。可以说,完美类WindowXp 开始菜单是一款用C++实现的非常完美的菜单,实现了多风格,操作上也很友好地支持按键的操作,功能基本上能满足大多应用软件的要求。当然,本开始菜的实现是相当复杂的,存在的问题也是意料之中的,希望大家批评指正并提出保贵意见。

本人的联系方式QQ 号:34544052 邮箱:song_0962@sina.com

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UIDesigner(腾讯公司出品) 在软件设计阶段,交互设计师或者产品经理等常常需要使用一些工具(比如Visio、Axure RP、Flash或者OmniGraffle等)制作出静态稿或者原型来表达设计思想。这些工具是各有各的优势,当然也各有各的缺点啦。那么腾讯CDC是如何设计软件原型的呢?这里向大家介绍我们正在研发的原型设计利器UIDesigner。   首先,先让我们来体验一下UIDesigner制作出来的原型效果。这个原型是一个设置窗体,主要由按钮、复选框、分组框和文本框等控件构成,其中一些按钮还具有响应的动作(如打开另一个界面,关闭窗体等)。如图一所示,这是使用Firework制作出来的交互图。 图一、使用Firework制作出来的设计稿   这种交互图的特点是简单明了,能够表示出各种控件的基本属性(如文本、位置和选中状态等),但它只是一个静态的图片,不能真实表现出每个控件的响应动作,如仅看这张图,是不清楚点击代理服务器设置分组框上的“设置…”按钮会有什么响应的。   那再看看你若使用UIDesigner制作出来的效果:最终输出的是一个EXE可执行文件(见图二左上角),双击运行后就会出现一个与最终实现效果完全一致的窗体(见图二右)。另外,它还是一个具有响应动作的真实原型,例如你若点击了“设置…”按钮,那就会弹出一个新的窗体(见图三)。 图二、使用UIDesinger制作出来的原型 图三、点击“设置…”按钮后弹出的另一窗体   实际上,这个新弹出的窗体都是一个独立的原型,也是由UIDesigner制作出来的。由于它里面的控件同样可以设置下一步的响应动作,所以从总体上来看,众多原型就像一个树状结构,而其中的父节点就是图二中的设置窗体了。这种结构具有一个很大的好处:无论你完成了多个界面的原型,只需要它们之间有链接关系,最后输出的只是一个EXE可执行文件。这样,你可以很方便地与其它人员表达自己的设计思路,让沟通变得加快捷。   接下来,我们看看这个原型是如何制作出来的。   第一步:建立空白窗体,调整它的大小、风格、标题和Icon 图四、使用UIDesigner制作原型—建立窗体   第二步:从工具箱中拖曳控件到窗体上,修改这些控件的属性(如Text等) 图、使用UIDesigner制作原型—加入控件   由于UIDesigner具有自动对齐的功能,所以在拖动控件到窗体时就可以完成排版工作,不需要再逐个像素去调整。另外,不单单在加入控件到窗体时,在改变已存在于窗体内的控件的位置或者大小时,自动对齐功能一样会生效。这样,设计者在调整控件大小或者位置时(包括控件与控件,控件与窗体边缘等的距离等情况),工作变得很简单。 图六、使用UIDesigner制作原型—自动对齐功能   第三步:几分钟后,所有的控件都放到窗体并设置好属性了,如下图。 图七、使用UIDesigner制作原型—整体界面效果   此时,设计者就可以使用软件的导出图片或者导出原型功能分享你的设计成果了。当然,现在这种效果还只是一个没有响应动作效果的原型。接下来,我们再给“设置…”按钮加入响应动作。首先,选中“设置…”按钮,然后点击工具栏的“响应”按钮,你将会看到如图八的响应设置窗口。此时,你可以选择打开窗体、打开网页、弹出对话框、修改属性值和关闭本身窗体等种效果,这里我们选择“打开窗体”,然后在弹出的对话框里指向弹出窗体的文件。最后,点击“完成”按钮即可。 图八、使用UIDesigner制作原型—设置控件的响应动作   到此为止,你就完成了一个与最终实现效果完全一致的高保真原型了。产品经理和开发人员等若想了解你的设计思想就不需要看着长长几页的说明文档了,而只需要运行你输出的原型文件,就可以对你的设计思路一目了然。   UIDesigner除了能让使用者能够快速地搭建起软件界面的高保真原型外,还提供了项目管理,让使用者能够方便地管理工程文件;提供了图片库和模板库功能,让使用者可以方便地重用以前的设计资源;提供了32个Windows客户端软件常用控件,满足使用者的设计需求;提供了多个属性设置入口,分别实现最常用属性设置、一般属性设置和高级属性设置功能。当然,UIDesigner不是专用来设计QQ的,其它的Windows客户端产品都在它的工作范围之内。总的来说呢,使用UIDesigner来制作原型是很高效的,而制作出来的原型也能够实现设计师、产品经理和程序开发工程师三者间的快速沟通,减少不必要的工作内耗。 ------------------------------------------------------------------ GUI_Design_Studio_3.5.94.0 在2008年,这款软件的作者从1,322位付费用户那获得了162,302美元的收入(其中仅12月份就有39,000美元),这令人鼓舞地证明了只要是提供真正价值的服务和软件,就能够创造很好的收入,即使在经济萧条的寒冬里。 GUI Design Studio是一款图形用户界面设计工具,您能用它在不需要编写任何代码或脚本的情况下快速地创建演示原型。使用标准元素绘制个人化的屏幕、窗口以及控件;将它们整合以展示操作工作流然后运行模拟程序测试您的设计。 当您需要绘制一款应用程序的外观或显示怎样将程序的各个部分连接起来时,您就可以使用GUI Design Studio来实现,如: 将产品创意文档化 制作项目提案 需求记录 创建屏幕图样 为开发人员制作详细的规格 为现有产品提出加强方案 以及多其它用途 为用户以及股东甚至您自己制作展示文件以: 验证设计 找出替代项 评估多个使用场景 系统需求 Microsoft Windows Vista/XP/NT/2000 至少15MB的硬盘空间 推荐不少于256MB的内存 工程 将您的工作组织放到工程里。 每个工程都拥有它自己的文件夹结构。 可连接您计算机或网络上任何地方的其它库工程。 可连接到您计算机或网络上任何地方使您能够方便地获取图片以及其它文件。 创建您想要的并独立于所有工程的个人化设计文件。 创建能重复使用的设计库以及工程之间的一致性。 将图片直接从剪贴板中粘贴到工程文件夹的文件中。 屏幕设计程序 可同时打开多个设计文档并能使用分页界面在文档间快速切换。 可使用标准Windows元素创建图形用户界面(GUI)屏幕,包括框架窗口、会话、菜单、工具栏、标签、按钮、复选框、单选按钮、滚动条、滑动调节框、微调框、组合框、树列表、列表框、编辑框以及静态文本等。 通过现有元素或其它自定义控件创建自定义控制组件。 在其它设计中创建将要使用的控件设计。 以常用的文件格式添加图标与图片。 从能够显示您将获得什么的控件面板中进行拖放操作。 属性编辑程序使您能将每个元素进行自定义。 元素的自动生成功能。 您能在任何地方放置任何元素。 Edge snapping能通过“点击”对屏幕元素进行统一记录。 设计网格向您提供了简单的制作具有一致性设计布局的方法。 只需单键点击就能排列元素组。 均衡地隔开元素组。 调整元素大小以适应其它元素或测量一组其它元素。 聚焦缩小以查看细节设计或聚焦放大以浏览设计概况。使用工具栏按键或键盘或鼠标的滑动缩小放大功能聚焦增量。 使用鼠标的滚动以及滚轮功能快速浏览设计的概况。 剪切、复制与粘贴。 使用可选的canvas向导显示可用的屏幕空间。 通过文本框与书签对您的设计进行注释。 为每个设计添加说明。 选择色彩主题以避免实际功能窗口的混淆。 图标 为图标面板提供快速的访问方式。 工程间可共享常用图标。 工程也能拥有它们独享的图标集。 使用将来在实际产品开发中可能用到的标准ICO文件。 包含的Icon Express编辑程序支持16色、256色以及最大尺寸为127 x 127的真彩图标。 如果愿意同样能整合任意其它的图标编辑应用程序。 展示与原型 在可导航元素(如按键与窗口)之间创建连接以显示控制流程。 为图象添加覆盖保护以及添加其它元素以创建可导航的热点。 支持形式化与非模态的窗口并支持显示、隐藏或微调窗口,以及窗口替换以实现切换效果。 锚点使您能对窗口进行准确定位。 能立即在模拟程序中测试或展示您的设计。 添加消息框以描述可能在真实应用程序中出现的功能。 可创建多种场景,如正常条件下的场景与多个出错场景。 选择要激活的场景或让模拟程序为您选择。 改有效的屏幕分辨率以查看您的设计如何适应不同的屏幕大小。 在没有进行脚本或代码编写的情况下,所有操作都是以图形模式完成。 ------------------------------------------------------------------ Balsamiq_Mockups_1.8.4 1. 首先安装 AdobeAIRInstaller.exe 2. 安装主程序 MockupsForDesktop.air 3. 使用 keygen 进行注册 在Balsamiq Mockups中绘制界面原型,就像在纸张和白板上手工绘画一样方便快速,而且不用担心出错,因为你完全可以进行回复/重做。在Balsamiq Mockups中设计原型比在纸张和白板可有趣多了! 丰富的控件支持 Balsamiq Mockups预先提供了丰富的控件,如浏览器窗口、媒体播放器组件、圆形图表等,让你信手拈来! 丰富的控件 方便的属性设置 当你选择一个控件时,会立刻出现该控件的属性选项,你可以随时编辑修改属性。 属性设定 无限的恢复/重做,不用担心出错,你可以无限制的进行回复和重做。 开放,可移植的数据 Balsamiq Mockups所生成的数据是易于阅读的XML格式数据,你可以进行方便的移植和重用集成。 开放的数据 多种方式的集成应用,你可以将Balsamiq Mockups集成倒Confluence, Jira, XWiki中. 集成应用 Balsamiq Mockups是一款免费的带有手绘风格的原型设计软件,可以帮助你设计桌面应用软件,Web 2.0 站点, RIA富网络应用程序, Web站点和Web应用软件。 功能和亮点: 操作方面:拖拽,控件分组,甚至元素之间的对齐都做得很到位; 预制了六十多个界面元素,从简单的输入框,下拉框,到经常用得到的导航条,日历,表格,到复杂的Tag Cloud,Cover Flow, 地图,WYSWYG的格式工具栏等,有了这些不用从头画起,其实比用白板都快; 界面元素的修改很简单,比如导航条的几个标签页的label,就是用逗号分隔的文字,下拉框的选项就是分行的文字; 使用xml语言来记录和保存界面元素和布局,从而使其能够快速的导入到你所需的任何一个项目中,或其他工具中。 可以将设计导出成PNG格式的图片; 随着使用的熟练,快捷键便派上用场,超过一半的元素均有快捷方式,这有助于原型的快速构造,几乎几分钟便可实现一个满意的而复杂的原型设计; 跨平台,Balsamiq Mokups是用Flex和Air实现的,所以在Mac OS, Linux和Windows下都能使用; 不仅仅有桌面版本,还有能集成在Confluence,JIRA,和XWiki中的版本,使得异地在线协作方便有效。 可以用命令行进行导出操作,这样就能让我写个脚本,从svn里checkout某个目录下的所有设计文件后,导出图片,打包后用邮件发到项目经理,工程师甚至客户那; 跨平台,Balsamiq Mokups是用Flex和Air实现的,所以在Mac OS, Linux和Windows下都能使用;不仅仅有桌面版本,还有能集成在Confluence,JIRA,和XWiki中的版本,使得异地在线协作方便有效;据作者说,现在这款软件设计就是用它自己来设计的,经典的“吃自己的狗粮”,这也让我对其有信心,因为它是开发者为开发者写的软件。 还有值得一提的是Balsamiq Mokups的在GetSatisfaction上的用户支持和服务,作者Peldi对问题报告,新需求的回应很积极和及时。而且根据这个讨论上看,到月底就会有一个专门用来分享界面控件设计的社区网站了,很期待。 再要说的一点是这款软件是要付费的,79美元(也可以免费,具体如何免费,请看网站上的说明),相对于它能节省下来的时间和提高的效率,是很值得的。Peldi说在2008年,这款软件就从1,322位付费用户那获得了162,302美元的收入(其中仅12月份就有39,000美元),这令人鼓舞地证明了只要是提供真正价值的服务和软件,就能够创造很好的收入,即使在经济萧条的寒冬里。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值