?? 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 <afxtempl.h>
//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<HWND, HWND, CMenuWndHook*, CMenuWndHook*> m_WndMenuMap;
static HHOOK m_hMenuHook;
public:
static COLORREF m_crFrame[4];
};
#endif // !defined(_ANYOU_COOLMENU_H)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -