WEB开发网
开发学院软件开发VC 让你的软件界面更漂亮(五) 阅读

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

 2007-10-04 20:11:36 来源:WEB开发网   
核心提示:类WindowXp 开始菜单到现在基本上是完美实现,在功能上基本和WindowXp 与Vista 操作系统的开始菜单一样,让你的软件界面更漂亮(五),界面当然漂亮,通过编程能实现风格多样,OnFunc)在.h 头文件对OnFunc()函数声明为消息函数:afx_msg void OnFunc();在OnFunc()函数

类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,".skin1.bmp");
    m_StartMenu.GetUserBitmap(1,".skin2.bmp");
    m_StartMenu.GetUserBitmap(2,".skin3.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,".skinOverFoucs.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,".skin1.bmp");
    m_StartMenu.GetBottomBarBitmap(1,".skin2.bmp");
    m_StartMenu.GetBottomBarBitmap(2,".skin3.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(),用法上完全一样。

1 2  下一页

Tags:软件 界面 漂亮

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接