CoolMenu.h
上传用户:sunh8215
上传日期:2010-02-13
资源大小:1616k
文件大小:9k
源码类别:

酒店行业

开发平台:

Visual C++

  1. /*########################################################################
  2. Filename:  coolmenu.h
  3. ----------------------------------------------------
  4. Remarks: ...
  5. ----------------------------------------------------
  6.   ########################################################################*/
  7. #if !defined(_ANYOU_COOLMENU_H)
  8. #define _ANYOU_COOLMENU_H
  9. #if _MSC_VER > 1000
  10. #pragma once
  11. #endif 
  12. #include "..\autocomplete\SubClass.h"
  13. #include <afxtempl.h>
  14. //Menu Level:------------------------------
  15. #define MDS_TOP_MENU  1 //顶部菜单
  16. #define MDS_SUBMENU      0 //其他子菜单
  17. #define MDS_TOP_SUBMENU -1 //主菜单
  18. #define MDS_TOP_ENDSUBMENU -2 //主菜单最后一项
  19. //Menu Style:------------------------------
  20. #define CMS_ICONBAR 0x00000001
  21. #define CMS_LOGOBAR 0x00000002
  22. #define CMS_32IMAGELIST     0x00000010
  23. #define MENU_SPACE 3
  24. #if !defined(ODS_HOTLIGHT)
  25. #define ODS_HOTLIGHT     0x0040
  26. #endif
  27. /*########################################################################
  28.   ------------------------------------------------
  29.   菜单子类化类 CCoolMenuHook
  30.   ------------------------------------------------
  31.   ########################################################################*/
  32. class CCoolMenuHook : public CSubclassWnd
  33. {
  34. protected:
  35. LRESULT WindowProc(UINT uMesssage, WPARAM wparam, LPARAM lparam);
  36. };
  37. /*########################################################################
  38.   ------------------------------------------------
  39. CoolMenu 类
  40.   ------------------------------------------------
  41.   ########################################################################*/
  42. class CCoolMenu : public CMenu  
  43. {
  44. //菜单项类-----------------------------------
  45. typedef class CCoolMenuItem
  46. {
  47. public:
  48. void SetItemName(CString sname);
  49. public:
  50. CString strText; //菜单文本
  51. CString strKeyName; //快捷键提示文本
  52. int nMenuLevel; //菜单级别
  53. int     nMenuID; //菜单ID,-2:顶级菜单,-1:弹出菜单,0:分隔条 
  54. HMENU hMenu;
  55. }COOLMENU, *LPCOOLMENU;
  56. friend class CCoolMenuHook;
  57. friend class CMenuWndHook;
  58. //成员函数------------------------------------------------------
  59. public:
  60. CCoolMenu();
  61. virtual ~CCoolMenu();
  62. BOOL LoadMenu(UINT uMenuID, UINT uToolBarID = 0);
  63. BOOL Attach(HMENU hMenu, UINT uToolBarID = 0);
  64. BOOL ModifyStyle(HMENU hMenu, int nlevel = MDS_SUBMENU);
  65. void AppendMenu(UINT uFlags, UINT uNewMenuItemID, CString strNewMenuItem, int nStyle = MDS_SUBMENU);
  66. void ClearData();
  67. HMENU Detach();
  68. //操作----------------------------------------------------------
  69. public:
  70. static void SubClass(HWND hwnd);
  71. static void UnSubClass();
  72. static BOOL InitImageList();
  73.     static HBITMAP CreateImage(HBITMAP hbitmap, int nstyle, BOOL bAlpha, COLORREF crBackColor, COLORREF crMarkColor);
  74. //属性-----------------------------------------------------------
  75. public:
  76. //图像列表---------------------------------
  77. static int SetImageList(UINT uToolBarID,UINT uBitmapID = NULL, BOOL bAlpha = FALSE);
  78. //菜单外观---------------------------------
  79. static BOOL SetLogoImage(UINT uBitmapID = NULL, int nwidth = 0);
  80. static void SetLogoText(CString strText, COLORREF color);
  81. //菜单颜色-------------------------------------
  82. static void SetBackGroundBmp(UINT nBitmapID){nBackGroundbmpID=nBitmapID;}
  83. static void SetMenuColor(COLORREF color)       {m_crMenuColor        = color;}
  84. static void SetTextColor(COLORREF color)       {m_crTextColor        = color;}
  85. static void SetIconBarColor(COLORREF color)    {m_crIconBarColor     = color;}
  86. static void SetLightBarColor(COLORREF color)   {m_crLightBarColor    = color;}
  87. static void SetLightBarStartColor(COLORREF color){m_crLightBarStartColor = color;}
  88. static void SetLightBarEndColor(COLORREF color){m_crLightBarEndColor = color;}
  89. static void SetHighLightColor(COLORREF color)  {m_crHighLightColor   = color;}
  90. static COLORREF GetMenuColor()  {return m_crMenuColor;}
  91. static COLORREF GetTextColor()  {return m_crTextColor;}
  92. static COLORREF GetIconBarColor()  {return m_crIconBarColor;}
  93. static COLORREF GetLightBarColor()   {return m_crLightBarColor;}
  94. static COLORREF GetLightBarStartColor(){return m_crLightBarStartColor;}
  95. static COLORREF GetLightBarEndColor(){return m_crLightBarEndColor;}
  96. static COLORREF GetHighLightColor()  {return m_crHighLightColor;}
  97. //菜单风格-------------------------------------
  98. static void SetStyle(DWORD dwStyle) {m_dwStyle = dwStyle;}
  99. static DWORD GetStyle() {return m_dwStyle;}
  100. //实现-----------------------------------------------------------
  101. protected:
  102. //绘制函数--------------------------------------
  103. static void DrawLightBar(CDC *pDC, CRect rect, BOOL bfill = TRUE);
  104. static void DrawLogoBar(CDC *pDC, CRect rect);
  105. static void DrawMenuBar(CDC* pDC, CRect rect);
  106. static void DrawGradsRect(CDC *pDC,  CRect &rect, COLORREF statColor, COLORREF endColor);
  107. static void DrawBackGroundBmp(CDC*pDC,CRect rect,BOOL nFill=false);
  108. //铺助函数--------------------------------------
  109. static int  GetIDFromToolBar(UINT uToolBarID, CUIntArray *uIDArray);
  110. static int  GetIndex(UINT uID);
  111. //消息处理函数---------------------------------------------------
  112. public:
  113. static void DrawItem(LPDRAWITEMSTRUCT lpDIS);
  114. static void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
  115. //数据-----------------------------------------------------------
  116. protected:
  117. CObList m_obMenuList; //菜单项对象列表.
  118. static DWORD m_dwStyle;
  119. static CCoolMenuHook m_MenuHook;
  120. //菜单图标图像列表-------------------------------
  121. static CImageList m_iImageList;
  122. static CImageList m_iHotImageList;
  123. static CImageList m_iDisabledImageList;
  124. static CUIntArray m_uIDArray; //菜单项ID数组.
  125. static CSize m_szMenuLogo; //主菜单左LOGO图像栏大小.
  126. static CSize m_szMenuIcon; //图标大小.
  127.     static UINT nBackGroundbmpID;       //要填充菜单背景的位图ID
  128. static UINT m_uLogoBmpID; //主菜单左LOGO图像ID.
  129. static UINT m_uBitmapID; //图像列表图像资源ID.
  130. static CString m_sLogoText; //LOGO字符串.
  131. static CRect m_rcMenuItem; //当前选择的顶级菜单项的矩形区域.
  132.     
  133. static COLORREF m_crLogoColor; //LOGO图像的背景颜色.
  134. static COLORREF m_crTextColor; //字体颜色.
  135. static COLORREF m_crMenuColor; //菜单颜色.
  136. static COLORREF m_crIconBarColor; //图标栏背景颜色.
  137. static COLORREF m_crLightBarColor; //光标条颜色.
  138. static COLORREF m_crLightBarStartColor;
  139. static COLORREF m_crLightBarEndColor; //光标条颜色.
  140. static COLORREF m_crMarkColor; //图片透明色.
  141. static COLORREF m_crHighLightColor; //高亮字体颜色.
  142. };
  143. #define MENU_STYLE_XP 0x00000001
  144. #define MENU_STYLE_XP2 0x00000006
  145. #define MENU_STYLE_DEFAULT  0x00000002
  146. #define MENU_STYLE_SNOW 0x00000003
  147. #define MENU_STYLE_GREEN 0x00000004
  148. #define MENU_STYLE_BLUE 0x00000005
  149. /*########################################################################
  150.   ------------------------------------------------
  151.     CCoolMenuTheme 类
  152.   ------------------------------------------------
  153.   ########################################################################*/
  154. class CCoolMenuTheme : public CObject
  155. {
  156. //建构---------------------------------------------------------
  157. public:
  158. static void SetTheme(DWORD dwstyle);
  159. CCoolMenuTheme();
  160. ~CCoolMenuTheme();
  161. };
  162. /*########################################################################
  163.   ------------------------------------------------
  164.  CMenuWndHook 类
  165.   ------------------------------------------------
  166.   ########################################################################*/
  167. class CMenuWndHook
  168. {
  169. //建构---------------------------------------------------------
  170. public:
  171.     CMenuWndHook(HWND hWnd);
  172. ~CMenuWndHook();
  173. static void InstallHook();
  174. static void UnInstallHook();
  175. //消息----------------------------------------------------------
  176. public:
  177. static LRESULT CALLBACK CoolMenuProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  178. static LRESULT CALLBACK WindowHook (int code, WPARAM wParam, LPARAM lParam);
  179. void OnNcCalcsize(NCCALCSIZE_PARAMS* lpncsp);
  180. void OnShowWindow(BOOL bShow);
  181. void OnNcDestroy();
  182. void OnPrint(CDC* pDC);
  183. void OnNcPaint();
  184. void OnWindowPosChanging(WINDOWPOS* pWindowPos);
  185. //操作----------------------------------------------------------
  186. public:
  187. static CMenuWndHook* AddWndHook(HWND hwnd);
  188. static CMenuWndHook* GetWndHook(HWND hwnd);
  189. //数据-----------------------------------------------------------
  190. protected:
  191. CRect m_rcMenu;
  192. CPoint m_ptMenu;
  193. HWND m_hWnd;
  194. CBitmap m_bmpBack;
  195. static CMap<HWND, HWND, CMenuWndHook*, CMenuWndHook*> m_WndMenuMap;
  196.     static HHOOK m_hMenuHook;
  197. public:
  198. static COLORREF m_crFrame[4];
  199. };
  200. #endif // !defined(_ANYOU_COOLMENU_H)