漂亮界面的軟件應該有漂亮的菜單,大家對 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
此菜單類可應還可用於其它場合,如主菜單,托盤菜單,右鍵快捷菜單等!歡迎批評指正並提出意見!