当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 让你的软件界面更漂亮(四):不完美之菜单

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 让你的软件界面更漂亮(四):不完美之菜单


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 80 ::
收藏到网摘: n/a

让你的软件界面更漂亮(四)——不完美之菜单

作者:朱一松

源代码下载

  漂亮界面的软件应该有漂亮的菜单,大家对 Windows XP 的开始菜单肯定不陌生吧,那种菜单独具风格。于是去研究了一下,发现其实它并不是真CMenu也不是其派生类,分析其结构发现其主要是两个 ListView、一个ToolBar、一个 Button 组成的。于是也写了个菜单类,但我并没有用 ListView 去实现,虽然不敢和 Windows XP相比,但我认为其是一种有个性的菜单,拿出和大家分享! 希望大家能写出有创新和自主产权的菜单。哈哈……。当然要先眼见为实如下图。



一、 实现原理

用 CWnd 和 CButton 来实现。主要的类文件为 Cyisong Menu.cpp CyisongMenu.h。

二、菜单使用方法说明

类 public 变量定义:

CYisongMenu m_GroupMenu; CYisongMenu m_SubGroupMenu;//子菜单

设置头像和添加菜单项:

m_GroupMenu.SetMenuHeader("我的主菜单",IDI_QQ, TRUE ); m_GroupMenu.AppendMenuItem("退出系统", IDC_SUBITEM, //菜单ID IDI_ICON1, // 图标 NULL, //子菜单指针 MENU_NORMAL|MENU_FONTBOLD//风格参数);m_GroupMenu.AppendMenuItem("功能菜单2", IDC_SUBITEM+1, IDI_ICON2, NULL, MENU_NORMAL );

继续用 AppendMenuItem 添加菜单项,

完成创建

m_GroupMenu.CreateGroupMenu(this,CRect(0,0,150,300),IDC_MENU,1,1);

至此基本完成创建工作,如果还要创建创子菜单用,请回到a处。

显示菜单项

在点(x,y)处显示菜单

m_GroupMenu. ShowMenuPos(x,y, LEFTBOTTOM);

第三个 数指定(x,y)为菜单的四个角点中的一个。如LEFTBOTTOM即为菜单左下角处在(x,y)的位置。

响映菜单项命令

在.cpp 中添加:

ON_COMMAND_RANGE(IDC_SUBITEM,IDC_SUBITEMMAX,OnMenuCommand) //消息映射函数

并在.h 中声明为:

void OnMenuCommand(UINT nID)

在 cpp 中的函数实现代码为:

CString StrSelect;StrSelect.Format("你选择了第%I功能",nID-IDC_SUBITEM + 1);MessageBox(StrSelect,"执行结果");

三、主要函数说明

原型:void SetMenuHeader(CString StrTitle ,UINT nID , BOOL bShowHead)
参数:StrTitle :头标题 ,nID :图标ID, bShowHead:如要显菜单头则为TRUE

原型:AppendMenuItem(CString StrTitle, int nID, int nIconID, CWnd* pSubMenu,
                     DWORD dwStyles, CString strTip)
参数:
     StrTitle:头标题,
          nID:菜单项ID,
      nIconID:图标ID,
     pSubMenu:如有子菜单 // pSubMenu为其指针,否则为NULL;
     dwStyles:MENU_NORMAL // 一般菜单项;
               MENU_FONTBOLD // 菜单项字体为粗体;
               MENU_BORDLINE // 为分界线;
        MENU_SUBITEM  // 菜单项有子菜单;
               MENU_CHECKBOX // 菜单有CHECK标志;
    
原型:CreateGroupMenu(CWnd *pParent, CRect rcClient, UINT nID, BOOL bShowHead,int nModeIcon)
参数:
    pParent:父窗口指针
    rcClient:显示位置
         nID:窗口ID
    bShowHead:是否显示菜单头
    nModeIcon:菜单项图标大小:1:16x16; 2:32x32; 3:48x48

此菜单类可应还可用于其它场合,如主菜单,托盘菜单,右鍵快捷菜单等!欢迎批评指正并提出意见!

我的联系方法:[email protected] QQ:34544052