程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 讓你的軟件界面更漂亮(五)

讓你的軟件界面更漂亮(五)

編輯:關於VC++

類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++實現的非常完美的菜單,實現了多風格,操作上也很友好地支持按鍵的操作,功能基本上能滿足大多應用軟件的要求。當然,本開始菜的實現是相當復雜的,存在的問題也是意料之中的,希望大家批評指正並提出保貴意見。

本人的聯系方式QQ 號:34544052 郵箱:[email protected]

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved