www.pudn.com > hotel2003.rar > CoolMenu.h


/*######################################################################## 
	Filename: 	coolmenu.h 
	---------------------------------------------------- 
	Remarks:	... 
	---------------------------------------------------- 
	 
  ########################################################################*/ 
#if !defined(_ANYOU_COOLMENU_H) 
#define _ANYOU_COOLMENU_H 
 
#if _MSC_VER > 1000 
#pragma once 
#endif  
 
#include "..\\autocomplete\\SubClass.h" 
#include  
 
//Menu Level:------------------------------ 
#define MDS_TOP_MENU		 1	//顶部菜单 
#define MDS_SUBMENU		     0	//其他子菜单 
#define MDS_TOP_SUBMENU		-1	//主菜单 
#define MDS_TOP_ENDSUBMENU	-2	//主菜单最后一项 
 
//Menu Style:------------------------------ 
#define CMS_ICONBAR			0x00000001 
#define CMS_LOGOBAR			0x00000002 
#define CMS_32IMAGELIST     0x00000010 
 
#define MENU_SPACE 3 
 
#if !defined(ODS_HOTLIGHT) 
#define	ODS_HOTLIGHT	    0x0040 
#endif 
 
/*######################################################################## 
			  ------------------------------------------------ 
						  菜单子类化类 CCoolMenuHook 
			  ------------------------------------------------ 
  ########################################################################*/ 
class CCoolMenuHook : public CSubclassWnd 
{ 
protected: 
	LRESULT WindowProc(UINT uMesssage, WPARAM wparam, LPARAM lparam); 
}; 
 
/*######################################################################## 
			  ------------------------------------------------ 
								CoolMenu 类 
			  ------------------------------------------------ 
  ########################################################################*/ 
class CCoolMenu : public CMenu   
{ 
	//菜单项类----------------------------------- 
	typedef class CCoolMenuItem 
	{ 
	public: 
		void SetItemName(CString sname); 
	public: 
		CString strText;			//菜单文本 
		CString strKeyName;			//快捷键提示文本 
		int		nMenuLevel;			//菜单级别 
		int     nMenuID;			//菜单ID,-2:顶级菜单,-1:弹出菜单,0:分隔条  
		HMENU	hMenu; 
	}COOLMENU, *LPCOOLMENU; 
 
	friend class CCoolMenuHook; 
	friend class CMenuWndHook; 
	 
//成员函数------------------------------------------------------ 
public: 
	CCoolMenu(); 
	virtual ~CCoolMenu(); 
	 
	BOOL LoadMenu(UINT uMenuID, UINT uToolBarID = 0); 
	BOOL Attach(HMENU hMenu, UINT uToolBarID = 0); 
	BOOL ModifyStyle(HMENU hMenu, int nlevel = MDS_SUBMENU); 
	void AppendMenu(UINT uFlags, UINT uNewMenuItemID, CString strNewMenuItem, int nStyle = MDS_SUBMENU); 
	void ClearData(); 
	HMENU Detach(); 
 
//操作---------------------------------------------------------- 
public: 
	static void SubClass(HWND hwnd); 
	static void UnSubClass(); 
	static BOOL InitImageList(); 
    static HBITMAP CreateImage(HBITMAP hbitmap, int nstyle, BOOL bAlpha, COLORREF crBackColor, COLORREF crMarkColor); 
//属性----------------------------------------------------------- 
public: 
	//图像列表--------------------------------- 
	static int SetImageList(UINT uToolBarID,UINT uBitmapID = NULL, BOOL bAlpha = FALSE); 
	 
	//菜单外观--------------------------------- 
	static BOOL SetLogoImage(UINT uBitmapID = NULL, int nwidth = 0); 
	static void SetLogoText(CString strText, COLORREF color); 
 
	//菜单颜色------------------------------------- 
	static void SetBackGroundBmp(UINT nBitmapID){nBackGroundbmpID=nBitmapID;} 
	static void SetMenuColor(COLORREF color)       {m_crMenuColor        = color;} 
	static void SetTextColor(COLORREF color)       {m_crTextColor        = color;} 
	static void SetIconBarColor(COLORREF color)    {m_crIconBarColor     = color;} 
	static void SetLightBarColor(COLORREF color)   {m_crLightBarColor    = color;} 
	static void SetLightBarStartColor(COLORREF color){m_crLightBarStartColor = color;} 
	static void SetLightBarEndColor(COLORREF color){m_crLightBarEndColor = color;} 
	static void SetHighLightColor(COLORREF color)  {m_crHighLightColor   = color;} 
	static COLORREF GetMenuColor()		 {return m_crMenuColor;} 
	static COLORREF GetTextColor()		 {return m_crTextColor;} 
	static COLORREF GetIconBarColor()	 {return m_crIconBarColor;} 
	static COLORREF GetLightBarColor()   {return m_crLightBarColor;} 
	static COLORREF GetLightBarStartColor(){return m_crLightBarStartColor;} 
	static COLORREF GetLightBarEndColor(){return m_crLightBarEndColor;} 
	static COLORREF GetHighLightColor()  {return m_crHighLightColor;} 
	 
	//菜单风格------------------------------------- 
	static void SetStyle(DWORD dwStyle) {m_dwStyle = dwStyle;} 
	static DWORD GetStyle() {return m_dwStyle;} 
 
//实现----------------------------------------------------------- 
protected: 
	//绘制函数-------------------------------------- 
	static void DrawLightBar(CDC *pDC, CRect rect, BOOL bfill = TRUE); 
	static void DrawLogoBar(CDC *pDC, CRect rect); 
	static void DrawMenuBar(CDC* pDC, CRect rect); 
	static void DrawGradsRect(CDC *pDC,  CRect &rect, COLORREF statColor, COLORREF endColor); 
	static void DrawBackGroundBmp(CDC*pDC,CRect rect,BOOL nFill=false); 
	 
	//铺助函数-------------------------------------- 
	static int  GetIDFromToolBar(UINT uToolBarID, CUIntArray *uIDArray); 
	static int  GetIndex(UINT uID); 
 
//消息处理函数--------------------------------------------------- 
public: 
	static void DrawItem(LPDRAWITEMSTRUCT lpDIS); 
	static void MeasureItem(LPMEASUREITEMSTRUCT lpMIS); 
	 
//数据----------------------------------------------------------- 
protected: 
	CObList m_obMenuList;				//菜单项对象列表. 
 
	static DWORD m_dwStyle; 
	static CCoolMenuHook m_MenuHook; 
	 
	//菜单图标图像列表------------------------------- 
	static CImageList m_iImageList; 
	static CImageList m_iHotImageList; 
	static CImageList m_iDisabledImageList; 
 
	static CUIntArray m_uIDArray;		//菜单项ID数组. 
 
	static CSize m_szMenuLogo;			//主菜单左LOGO图像栏大小. 
	static CSize m_szMenuIcon;			//图标大小. 
    static UINT nBackGroundbmpID;       //要填充菜单背景的位图ID 
	static UINT m_uLogoBmpID;			//主菜单左LOGO图像ID. 
	static UINT m_uBitmapID;			//图像列表图像资源ID. 
	static CString m_sLogoText;			//LOGO字符串. 
	static CRect m_rcMenuItem;			//当前选择的顶级菜单项的矩形区域. 
     
	static COLORREF m_crLogoColor;			//LOGO图像的背景颜色. 
	static COLORREF m_crTextColor;			//字体颜色. 
	static COLORREF m_crMenuColor;			//菜单颜色. 
	static COLORREF m_crIconBarColor;		//图标栏背景颜色. 
	static COLORREF m_crLightBarColor;		//光标条颜色. 
	static COLORREF m_crLightBarStartColor; 
	static COLORREF m_crLightBarEndColor;	//光标条颜色. 
	static COLORREF m_crMarkColor;			//图片透明色. 
	static COLORREF m_crHighLightColor;		//高亮字体颜色. 
}; 
 
#define MENU_STYLE_XP		0x00000001 
#define MENU_STYLE_XP2		0x00000006 
#define MENU_STYLE_DEFAULT  0x00000002 
#define MENU_STYLE_SNOW		0x00000003 
#define MENU_STYLE_GREEN	0x00000004 
#define MENU_STYLE_BLUE		0x00000005 
 
/*######################################################################## 
			  ------------------------------------------------ 
						    CCoolMenuTheme 类 
			  ------------------------------------------------ 
  ########################################################################*/ 
class CCoolMenuTheme : public CObject 
{ 
//建构--------------------------------------------------------- 
public: 
	static void SetTheme(DWORD dwstyle); 
	CCoolMenuTheme(); 
	~CCoolMenuTheme(); 
}; 
/*######################################################################## 
			  ------------------------------------------------ 
							 CMenuWndHook 类 
			  ------------------------------------------------ 
  ########################################################################*/ 
class CMenuWndHook 
{ 
//建构--------------------------------------------------------- 
public: 
    CMenuWndHook(HWND hWnd); 
	~CMenuWndHook(); 
	static void InstallHook(); 
	static void UnInstallHook(); 
 
//消息---------------------------------------------------------- 
public: 
	static LRESULT CALLBACK CoolMenuProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 
	static LRESULT CALLBACK WindowHook (int code, WPARAM wParam, LPARAM lParam); 
 
	void OnNcCalcsize(NCCALCSIZE_PARAMS* lpncsp); 
	void OnShowWindow(BOOL bShow); 
	void OnNcDestroy(); 
	void OnPrint(CDC* pDC); 
	void OnNcPaint(); 
	void OnWindowPosChanging(WINDOWPOS* pWindowPos); 
 
//操作---------------------------------------------------------- 
public: 
	static CMenuWndHook* AddWndHook(HWND hwnd); 
	static CMenuWndHook* GetWndHook(HWND hwnd); 
 
//数据----------------------------------------------------------- 
protected: 
	CRect m_rcMenu; 
	CPoint m_ptMenu; 
	HWND m_hWnd; 
	CBitmap m_bmpBack; 
 
	static CMap m_WndMenuMap; 
    static HHOOK m_hMenuHook; 
public: 
	static COLORREF m_crFrame[4]; 
}; 
#endif // !defined(_ANYOU_COOLMENU_H)