?? newmenu.h
字號:
//------------------------------------------------------------------------------
// File : NewMenu.h
// Version : 1.18
// Date : 30. November 2003
// Author : Bruno Podetti
// Email : Podetti@gmx.net
// Web : www.podetti.com/NewMenu
// Systems : VC6.0/7.0 and VC7.1 (Run under (Window 98/ME), Windows Nt 2000/XP)
//
// You are free to use/modify this code but leave this header intact.
// This class is public domain so you are free to use it any of your
// applications (Freeware, Shareware, Commercial).
// All I ask is that you let me know so that if you have a real winner I can
// brag to my buddies that some of my code is in your app. I also wouldn't
// mind if you sent me a copy of your application since I like to play with
// new stuff.
//------------------------------------------------------------------------------
#ifndef __CNewMenu_H_
#define __CNewMenu_H_
// new constant for having the same color in the toolbar, you can define this
// also in the projekt definition
//#define USE_NEW_DOCK_BAR
#pragma warning(push)
#pragma warning(disable : 4211)
#include <afxtempl.h>
#include <afxpriv.h>
// Flagdefinitions
#define MFT_TITLE 0x0001
#define MFT_TOP_TITLE 0x0000
#define MFT_SIDE_TITLE 0x0002
#define MFT_GRADIENT 0x0004
#define MFT_SUNKEN 0x0008
#define MFT_LINE 0x0010
#define MFT_ROUND 0x0020
#define MFT_CENTER 0x0040
// Typedefinition for compatibility to MFC 7.0
#ifndef DWORD_PTR
typedef DWORD DWORD_PTR, *PDWORD_PTR;
#endif
#ifndef ULONG_PTR
typedef unsigned long ULONG_PTR, *PULONG_PTR;
#endif
#ifndef LONG_PTR
typedef long LONG_PTR, *PLONG_PTR;
#endif
// Additional flagdefinition for highlighting
#ifndef ODS_HOTLIGHT
#define ODS_HOTLIGHT 0x0040
#endif
#ifndef ODS_INACTIVE
#define ODS_INACTIVE 0x0080
#endif
/////////////////////////////////////////////////////////////////////////////
// Constans for detecting OS-Type
enum Win32Type
{
Win32s,
WinNT3,
Win95,
Win98,
WinME,
WinNT4,
Win2000,
WinXP
};
extern const Win32Type g_Shell;
extern BOOL bRemoteSession;
/////////////////////////////////////////////////////////////////////////////
// Support for getting menuinfo without runtime-error
#if(WINVER < 0x0500)
#define MIM_BACKGROUND 0x00000002
typedef struct tagMENUINFO
{
DWORD cbSize;
DWORD fMask;
DWORD dwStyle;
UINT cyMax;
HBRUSH hbrBack;
DWORD dwContextHelpID;
ULONG_PTR dwMenuData;
} MENUINFO, FAR *LPMENUINFO;
typedef MENUINFO CONST FAR *LPCMENUINFO;
BOOL GetMenuInfo( HMENU hMenu, LPMENUINFO pInfo);
#endif
/////////////////////////////////////////////////////////////////////////////
// Global helperfunctions
UINT GetSafeTimerID(HWND hWnd, const UINT uiElapse);
BOOL DrawMenubarItem(CWnd* pWnd,CMenu* pMenu, UINT nItemIndex,UINT nState);
WORD NumBitmapColors(LPBITMAPINFOHEADER lpBitmap);
HBITMAP LoadColorBitmap(LPCTSTR lpszResourceName, HMODULE hInst, int* pNumcol=NULL);
void UpdateMenuBarColor(HMENU hMenu=NULL);
/////////////////////////////////////////////////////////////////////////////
// Forwarddeclaration for drawing purpose
class CMenuTheme;
class CNewDockBar;
/////////////////////////////////////////////////////////////////////////////
// CNewMenuIcons menu icons for drawing
class CNewMenuIcons : public CObject
{
DECLARE_DYNCREATE(CNewMenuIcons)
public:
CNewMenuIcons();
virtual ~CNewMenuIcons();
public:
BOOL GetIconSize(int* cx, int* cy);
CSize GetIconSize();
virtual int FindIndex(UINT nID);
virtual void OnSysColorChange();
virtual BOOL LoadToolBar(LPCTSTR lpszResourceName, HMODULE hInst);
virtual BOOL LoadToolBar(WORD* pToolInfo, COLORREF crTransparent=CLR_NONE);
virtual BOOL DoMatch(LPCTSTR lpszResourceName, HMODULE hInst);
virtual BOOL DoMatch(WORD* pToolInfo, COLORREF crTransparent=CLR_NONE);
virtual BOOL LoadBitmap(int nWidth, int nHeight, LPCTSTR lpszResourceName, HMODULE hInst=NULL);
// virtual BOOL SetBlendImage();
virtual int AddGloomIcon(HICON hIcon, int nIndex=-1);
virtual int AddGrayIcon(HICON hIcon, int nIndex=-1);
virtual BOOL MakeImages();
void SetResourceName(LPCTSTR lpszResourceName);
int AddRef();
int Release();
#if defined(_DEBUG) || defined(_AFXDLL)
// Diagnostic Support
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
public:
LPCTSTR m_lpszResourceName;
HMODULE m_hInst;
int m_nColors;
COLORREF m_crTransparent;
CImageList m_IconsList;
CArray<UINT,UINT&> m_IDs;
DWORD m_dwRefCount;
};
/////////////////////////////////////////////////////////////////////////////
// CNewMenuBitmaps menu icons for drawing
class CNewMenuBitmaps : public CNewMenuIcons
{
DECLARE_DYNCREATE(CNewMenuBitmaps)
public:
CNewMenuBitmaps();
virtual ~CNewMenuBitmaps();
public:
int Add(UINT nID, COLORREF crTransparent=CLR_NONE);
int Add(HICON hIcon, UINT nID=0);
int Add(CBitmap* pBitmap, COLORREF crTransparent=CLR_NONE);
virtual void OnSysColorChange();
CArray<COLORREF,COLORREF&> m_TranspColors;
};
/////////////////////////////////////////////////////////////////////////////
// CNewMenuItemData menu item data for drawing
class CNewMenuItemData : public CObject
{
DECLARE_DYNCREATE(CNewMenuItemData)
public:
CNewMenuItemData();
virtual ~CNewMenuItemData();
public:
LPCTSTR GetString();
void SetString(LPCTSTR szMenuText);
#if defined(_DEBUG) || defined(_AFXDLL)
// Diagnostic Support
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
public:
CString m_szMenuText;
UINT m_nTitleFlags;
UINT m_nFlags;
UINT m_nID;
UINT m_nSyncFlag;
CNewMenuIcons* m_pMenuIcon;
int m_nMenuIconOffset;
void* m_pData;
};
/////////////////////////////////////////////////////////////////////////////
// CNewMenu the new menu class
class CNewMenu : public CMenu
{
friend class CNewMenuHook;
friend class CNewMenuIcons;
DECLARE_DYNCREATE(CNewMenu)
public:
// how the menu's are drawn, either original or XP style
typedef enum
{
STYLE_ORIGINAL,
STYLE_ORIGINAL_NOBORDER,
STYLE_XP,
STYLE_XP_NOBORDER,
STYLE_SPECIAL,
STYLE_SPECIAL_NOBORDER,
STYLE_ICY,
STYLE_ICY_NOBORDER,
STYLE_XP_2003,
STYLE_XP_2003_NOBORDER,
STYLE_UNDEFINED = -1
} EDrawStyle;
// how seperators are handled when removing a menu (Tongzhe Cui)
typedef enum {NONE, HEAD, TAIL, BOTH} ESeperator;
public:
CNewMenu(HMENU hParent=0);
virtual ~CNewMenu();
// Functions for loading and applying bitmaps to menus (see example application)
virtual BOOL LoadMenu(HMENU hMenu);
virtual BOOL LoadMenu(LPCTSTR lpszResourceName);
virtual BOOL LoadMenu(int nResource);
BOOL LoadToolBar(WORD* pIconInfo, COLORREF crTransparent=CLR_NONE);
BOOL LoadToolBar(LPCTSTR lpszResourceName, HMODULE hInst = NULL);
BOOL LoadToolBar(UINT nToolBar, HMODULE hInst = NULL);
BOOL LoadToolBars(const UINT *arID,int n, HMODULE hInst = NULL);
BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset);
BOOL AddBitmapToImageList(CImageList *list,UINT nResourceID);
static HBITMAP LoadSysColorBitmap(int nResourceId);
// custom check mark bitmaps
void LoadCheckmarkBitmap(int unselect, int select);
// functions for appending a menu option, use the AppendMenu call
BOOL AppendMenu(UINT nFlags,UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL,int nIconNormal=-1);
BOOL AppendMenu(UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CImageList *il,int xoffset);
BOOL AppendMenu(UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CBitmap *bmp);
BOOL AppendODMenu(LPCTSTR lpstrText, UINT nFlags = MF_OWNERDRAW, UINT nID = 0, int nIconNormal = -1);
BOOL AppendODMenu(LPCTSTR lpstrText, UINT nFlags, UINT nID, CBitmap* pbmp);
BOOL AppendODMenu(LPCTSTR lpstrText, UINT nFlags, UINT nID, CImageList *il, int xoffset);
BOOL AppendODMenu(LPCTSTR lpstrText, UINT nFlags, UINT nID, CNewMenuIcons* pIcons, int nIndex);
// for appending a popup menu (see example application)
CNewMenu* AppendODPopupMenu(LPCTSTR lpstrText);
// functions for inserting a menu option, use the InsertMenu call (see above define)
BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL,int nIconNormal=-1);
BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CImageList *il,int xoffset);
BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CBitmap *bmp);
BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText, UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);
BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText, UINT nFlags, UINT nID, CBitmap* pBmp);
BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText, UINT nFlags, UINT nID, CImageList *il,int xoffset);
BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText, UINT nFlags, UINT nID, CNewMenuIcons* pIcons, int nIndex);
// Same as ModifyMenu but replacement for CNewMenu
BOOL ModifyODMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0,LPCTSTR lpszNewItem = NULL);
BOOL ModifyODMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp);
// functions for modifying a menu option, use the ModifyODMenu call (see above define)
BOOL ModifyODMenu(LPCTSTR lpstrText, UINT nID=0, int nIconNormal=-1);
BOOL ModifyODMenu(LPCTSTR lpstrText, UINT nID, CImageList *il, int xoffset);
BOOL ModifyODMenu(LPCTSTR lpstrText, UINT nID, CNewMenuIcons* pIcons, int nIndex);
BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID,CBitmap *bmp);
BOOL ModifyODMenu(LPCTSTR lpstrText,LPCTSTR OptionText,int nIconNormal);
// use this method for adding a solid/hatched colored square beside a menu option
// courtesy of Warren Stevens
BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID,COLORREF fill,COLORREF border,int hatchstyle=-1);
// for deleting and removing menu options
BOOL DeleteMenu(UINT uiId,UINT nFlags);
BOOL RemoveMenu(UINT uiId,UINT nFlags);
int RemoveMenu(LPCTSTR pText, ESeperator sPos=CNewMenu::NONE);
// function for retrieving and setting a menu options text (use this function
// because it is ownerdrawn)
BOOL GetMenuText(UINT id,CString &string,UINT nFlags = MF_BYPOSITION);
BOOL SetMenuText(UINT id,CString string, UINT nFlags = MF_BYPOSITION);
// Getting a submenu from it's name or position
CMenu* GetSubMenu (LPCTSTR lpszSubMenuName) const;
CMenu* GetSubMenu (int nPos) const;
int GetMenuPosition(LPCTSTR pText);
// Destoying
virtual BOOL DestroyMenu();
// Drawing:
// Draw an item
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);
// Measure an item
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
// Draw title of the menu
virtual void DrawTitle(LPDRAWITEMSTRUCT lpDIS,BOOL bIsMenuBar);
// Erase the Background of the menu
virtual BOOL EraseBkgnd(HWND hWnd,HDC hDC);
static COLORREF GetMenuBarColor2003();
static COLORREF GetMenuBarColorXP();
static COLORREF GetMenuBarColor(HMENU hMenu=NULL);
static COLORREF GetMenuColor(HMENU hMenu=NULL);
static void SetMenuTitleFont(CFont* pFont);
static void SetMenuTitleFont(LOGFONT* pLogFont);
static LOGFONT GetMenuTitleFont();
// Menutitle function
BOOL SetMenuTitle(LPCTSTR pTitle,UINT nTitleFlags=MFT_TOP_TITLE);
BOOL RemoveMenuTitle();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -