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

转载 2012年03月22日 13:59:53


       类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++实现的非常完美的菜单,实现了多风格,操作上也很友好地支持按键的操作,功能基本上能满足大多应用软件的要求。当然,本开始菜的实现是相当复杂的,存在的问题也是意料之中的,希望大家批评指正并提出保贵意见。

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

让你的软件界面更漂亮(五) ――完美类WindowXp 开始菜单(CYisongStartMenu) 编程指南 作者:朱一松下载源代码类WindowXp 开始菜单到现在基本上是完美实现,在功能上基本和...
  • immcss
  • immcss
  • 2008年06月12日 10:25
  • 586

[ZT]让你的软件界面更漂亮(1、2)

让你的软件界面更漂亮(一)让你的软件界面更漂亮(二)作者:朱一松非客户区消息响应:void OnNcLButtonDown(UINT nHitTest, CPoint point);//单击标题栏时是...
  • mythma
  • mythma
  • 2005年09月22日 14:38
  • 1632

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

            一、漂亮界面实现的原理  用图象元素自绘窗口标题样栏,边框,系统按钮(最大化、最小化、关闭按钮)还有按窗口中的控件。图象元素可以是位图,也可用绘图函数实现。如果用位图实现,那需...
  • aa211314
  • aa211314
  • 2007年12月26日 16:45
  • 1924

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

让你的软件界面更漂亮(一)作者:朱一松下载源代码  我们使用过很多的软件,给我们留下印象很深的是那些界面漂亮且迷人的软件,国外的软件象QuickTime,国产的象金山词霸等,它们的软件界面设计风格都有...
  • Koupoo
  • Koupoo
  • 2010年12月29日 22:52
  • 639

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

漂亮界面的软件应该有漂亮的菜单,大家对 Windows XP 的开始菜单肯定不陌生吧,那种菜单独具风格。于是去研究了一下,发现其实它并不是真CMenu也不是其派生类,分析其结构发现其主要是两个 L...
  • woaixiaozhe
  • woaixiaozhe
  • 2012年03月22日 13:57
  • 441

让你的软件界面更漂亮 [VC++]

我们使用过很多的软件, 给我们留下印象很深的是那些界面漂亮且迷人的软件, 国外的软件象QickTime,国产的象金山词霸等,它们的软件界面设计风格都有独特之处。本人跟据自已的经验和大家探讨一下软件的漂...
  • ganjinyou
  • ganjinyou
  • 2006年05月09日 20:24
  • 2030

如何让你的程序界面更漂亮

以前看到别人的程序界面漂亮, 很羡慕,现在给新产品做界面,发现原来我也可以做出漂亮的界面。写代码之前研究一些界面美化方法,其实方法就是钩子,子类化和贴图。用钩子相对灵活,在开发工程中不用考虑界面的美化...
  • wuhuiran
  • wuhuiran
  • 2007年06月11日 17:57
  • 1075

27 彩色版的C语言,让文字更漂亮

彩色版的C语言,让文字更漂亮
  • czg13548930186
  • czg13548930186
  • 2017年05月29日 22:06
  • 2477

《Java程序性能优化 让你的Java程序更快、更稳定》阅读笔记

java性能调优部分 Linux中常用的监控CPU整体性能的工具有: § mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。               ...
  • JiShuiSanQianLi
  • JiShuiSanQianLi
  • 2016年11月09日 10:05
  • 1278

很爱很爱你

想为你做些事 让你更快乐的事好在你的心中埋下我的名字求时间 趁着你 不注意的时候悄悄地 把这种子酿成果实我想他的确是 更适合你的男子我太不够体贴成熟优雅懂事如果我 退回到 好朋友的位置你也就 不再需要...
  • m_halfman
  • m_halfman
  • 2006年09月01日 14:32
  • 674
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让你的软件界面更漂亮(五)
举报原因:
原因补充:

(最多只允许输入30个字)