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

□   深圳远客 (song_0962@sina.com)

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

1.文件说明

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

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

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

2.CYisongStartMenu 用法

  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_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");

…..

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

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

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

完美开始菜单的软件设计(VC)相关推荐

  1. 如何取得好的软件设计

    [转贴] 段先德  2006-5-20 似乎作为一个软件开发者,就注定要背着沉重的行囊,穿行在茂密的热带丛林里,酷热,没有风,只有腐烂的植被.浓浓的瘴气.不时从肩膀上爬过的毒蜘蛛和从脚背上" ...

  2. CAD制图, 机械CAD, 建筑CAD, 电力CAD, CAD设计, 数控与CAM, DXF导入\导出, 打印, 软件开发, VC++源代码,OCX 控件源程序2018

    CAD制图, 机械CAD, 建筑CAD, 电力CAD, CAD设计, 数控与CAM, DXF导入\导出, 打印, 软件开发,VC++源代码,OCX 控件源程序2018 -- 100%源码开放企业级CA ...

  3. opencv对图像是软解码_基于opencv和c++的图像处理软件设计与实现(26页)-原创力文档...

    毕业设计中文摘要 基于opencv和c++的图像处理软件设计与实现 摘要: 本文主要对基于opencv和c++的图像处理软件设计与实现进行介绍.本软件由主界面和若干二级菜单组成,主界面功能有文件操作. ...

  4. iOS开发笔记--基于面向协议MVP模式下的软件设计

    传统模式下的开发 MVC MVVM 基于面向协议MVP的介绍 MVP实战开发 说在前面:  相信就算你是个iOS新手也应该听说过MVC的,MVC是构建iOS App的标准模板.随着时间的推移,在iOS ...

  5. 南邮-软件设计实验(C++版)

    说在前面:所有代码实现均在C++环境下实现(与c基本一致,只是文件后缀名不一样).建立文件(*.cpp),粘贴代码即可,运行~ 若将代码直接复制进.c文件编译会出错哦! 如需C语言版移步软件设计-C语 ...

  6. 南邮-软件设计实验(Java GUI版)

    说在前面:利用此次课程设计的机会,慢慢地加强对编程语言实际应用的能力,不断地丰富知识点! 此篇文章是基于java语言开发GUI的应用程序,希望可以帮助一些想在Java学习中深入的同学(当然,这里应用的 ...

  7. 南邮-软件设计实验(C语言版)

    说在前面:所有代码实现均在VC++6.0环境下测试成功.建立文件(*.c),粘贴代码即可,运行~ 本次设计实验主要是对C语言字符串.数组.结构体.文件读写等知识的实际运用.文章中的代码测试基本可以运行 ...

  8. 09年齐鲁软件设计大赛题目

                  2009年软件设计大赛命题  第一部分 参赛题目                  一.手机游戏 随着手机的广泛普及和手机技术含量的不断升级,随着3G时代的到来,种种迹象都 ...

  9. 《软件设计精要与模式》第二版源代码

    <软件设计精要与模式>第二版的代码相较于第一版而言,做了一定的修改.代码采用C#语言编写,并在Windows XP, Visual Studio 2008, SQL Server 2005 ...

最新文章

  1. js校验复选框(多选按钮)是否被选中的方法
  2. Java 8里一元函数Function的compose和andThen方法区别
  3. xuggler 中文开发_Xuggler开发教程
  4. Redis:02---安装Redis(Linux+Windows+Docker)
  5. 在html中定位属性怎么用,CSS元素定位的使用方法
  6. 约瑟夫环c语言代码顺序存储,约瑟夫环问题算法的C语言代码实现
  7. 计算机大赛获奖团队采访,坚持勤奋铸就无悔青春——全国大学生数学建模大赛一等奖获奖者专访...
  8. mtcnn人脸检测中将ckpt训练模型转换为 npy保存
  9. 破解RAR加密文件实验
  10. ANSYS Electronics Desktop 19.2电机仿真思路
  11. acm--Lowest Bit
  12. RabbitMq Direct exchange路由模型
  13. 微信小程序带图片弹窗简单实现
  14. ROBOGUIDE软件机床上下料仿真:数控铣床运动机构制作
  15. 系分 - 操作系统 - 嵌入式
  16. 快速提取视频中的文案字幕,短视频创作者必看
  17. 云计算的未来是XMPP
  18. 全球域名商解析新增保有量25强:爱名网居亚 增幅突出
  19. 嵌入式linux屏保设置,嵌入式系统 屏保设置
  20. excel2latex

热门文章

  1. 《一无所获满载而归》——孙溟㠭(展)书法绘画篆刻
  2. windows系统复制文件到c盘提示0X80070522错误 无法复制文件到系统盘
  3. 微信小程序 302 错误码
  4. P图软件瘦脸眼睛放大和手动瘦身功能
  5. 电子签章pdf文件之我见
  6. 【分布外检测】《Energy-based Out-of-distribution Detection》 NIPS‘20
  7. Mathtype矩阵中的省略号不展示
  8. python手绘代码_Python实现手绘功能
  9. 前端 jQuery框架
  10. 网游已成文化产业支柱:年入600亿为电影4.5倍