类WindowXp (CYisongStartMenu)开始菜单 编程指南

来源:互联网 发布:黑客linux入门 pdf 编辑:程序博客网 时间:2024/06/06 06:52

本菜单实现环境为VC6.0,其功能基本上和WindowXp Vista 操作系统的开始菜单一样,界面非常精美,通过编程能实现风格多样,具有个性化的功能菜单。

 

YisongStartMenu开始菜单有如下主要特点:

  1. C++环境实现,界面风格可实现自定义
  2. 不仅适用Mouse 操作,还支持响应按键功能。
  3. 可显示Left Bar 并定义其风格
  4. 可自定义焦点亮条的风格
  5. 可设置菜单子项为Check Option 风格

1.文件说明

 

类文件:MyStartMenu.h MyStartMenu.cpp (CyisongStartMenu 开始菜单类)

                MyToolTipCtrl.h,  MyToolTipCtrl.cpp(CmyToolTipCtrl 提示消息类)

其它文件:结构常量定义文件

 

2CYisongStartMenu 用法

  1. 定义一变量:CYisongStartMenu  m_StartMenu;

 

  1. .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);

//实现菜单菜项的添加(右边一般菜单子项的添加)

//和上面方法一样,只不过是用函数AppendProgItem()

 

m_StartMenu. AppendPlaceItem(_T("My Documents"),

ID_PLACELIST_MYDOCUMENT,0,MENU_DEFAULT,

IDI_ICON_MYDOCUMENT);

             …..

m_StartMenu. AppendPlaceItem(….);

//设置菜单子项文本颜色, PLACELIST_TYPEPlace 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");

     

…..

 

  1. 显示菜单方法

//空口中在某点(x,y)处显示,作为m_hWnd 的子窗口

      m_StartMenu.TrackPopPane(point.x, point.y, m_hWnd, 0);

 

 

  1. 响应菜单菜单命令

在用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_MENUITEMOnFunc)

 

.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: 菜单风格定义,其值可为下列值或组合

 

MENU_NORMAL    :普通风格

MENU_DEFAULT    :默认风格,和普通风格其本一样,但字体为粗体          

MENU_SEPARATOR:作为分隔条         

MENU_GRAY           灰色          

MENU_DISABLE       :禁止           

MENU_ENABLE        :使能           

MENU_CHECKED    :带检查标志           

MENU_UNCHECKED:去检查标志         

           

MENU_HILITE        :有高亮条   

MENU_POPUP         :有弹出子菜单                   

MENU_BOTTOM    :主程序项(象开始菜单的[所有程序]

 

            uIconResID:菜单项前面的图标ID ,其值为0 图标会由参数hIcon指定,若hIcon

                                    也为NULL,则不显示图标。

            hIcon            菜单项前面的图标句柄,初始为NULL

            szTooltip      提示信息文本。

            PSubMenu   为该菜单项指定的子菜单。初始为NULL

 

           

如显示为分隔条的方法是:

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  则显示默认的高亮条

 

                   注意:一般在菜单初始完成后调用该函数