NewMenu.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:12k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //------------------------------------------------------------------------------
  2. // File    : NewMenu.h 
  3. // Version : 1.0
  4. // Date    : Mai 2002
  5. // Author  : Bruno Podetti
  6. // Email   : Podetti@gmx.net
  7. // Systems : VC6.0 and VC7.0 (Run under (Window 98/ME), Windows Nt 2000/XP)
  8. //
  9. // Bug Fixes and portions of code from previous version supplied by:
  10. //
  11. // Brent Corkum, Ben Ashley, Girish Bharadwaj, Jean-Edouard Lachand-Robert,
  12. // Robert Edward Caldecott, Kenny Goers, Leonardo Zide, Stefan Kuhr, 
  13. // Reiner Jung, Martin Vladic, Kim Yoo Chul, Oz Solomonovich, Tongzhe Cui, 
  14. // Stephane Clog, Warren Stevens, Damir Valiulin
  15. // 
  16. // You are free to use/modify this code but leave this header intact.
  17. // This class is public domain so you are free to use it any of your 
  18. // applications (Freeware, Shareware, Commercial). 
  19. // All I ask is that you let me know so that if you have a real winner I can
  20. // brag to my buddies that some of my code is in your app. I also wouldn't 
  21. // mind if you sent me a copy of your application since I like to play with
  22. // new stuff.
  23. //------------------------------------------------------------------------------
  24. //-----------------------------------------------------------------------//
  25. // This is a part of the GuiLib MFC Extention.  //
  26. // Modified by  :  Francisco Campos  //
  27. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  28. // This code is provided "as is", with absolutely no warranty expressed  //
  29. // or implied. Any use is at your own risk.  //
  30. // If the source code in  this file is used in any application  //
  31. // then acknowledgement must be made to the author of this program  //
  32. // fcampos@tutopia.com  //
  33. //-----------------------------------------------------------------------//
  34. #ifndef __CNewMenu_H_
  35. #define __CNewMenu_H_
  36. #pragma warning(push)
  37. #pragma warning(disable : 4211)
  38. #include <afxtempl.h>
  39. #include <afxpriv.h>
  40. #include "GuiLib.h" 
  41. // Flagdefinitions 
  42. #define MFT_TITLE       0x0001
  43. #define MFT_TOP_TITLE   0x0000
  44. #define MFT_SIDE_TITLE  0x0002
  45. #define MFT_GRADIENT    0x0004
  46. #define MFT_SUNKEN      0x0008
  47. #define MFT_LINE        0x0010
  48. #define MFT_ROUND       0x0020
  49. #define MFT_CENTER      0x0040
  50. // Typedefinition for compatibility to MFC 7.0
  51. #ifndef DWORD_PTR
  52. typedef DWORD DWORD_PTR, *PDWORD_PTR;
  53. #endif
  54. #ifndef ULONG_PTR
  55. typedef unsigned long ULONG_PTR, *PULONG_PTR;
  56. #endif
  57. #ifndef LONG_PTR
  58. typedef long LONG_PTR, *PLONG_PTR;
  59. #endif
  60. /////////////////////////////////////////////////////////////////////////////
  61. // Forwarddeclaration for drawing purpose
  62. #include "MenuBar.h"
  63. class CMenuTheme;
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CNewMenuItemData menu item data for drawing
  66. class CNewMenuItemData : public CObject
  67. {
  68.   DECLARE_DYNCREATE(CNewMenuItemData)
  69. public:
  70.   CNewMenuItemData();
  71.   virtual ~CNewMenuItemData();
  72. public:
  73.   LPCTSTR GetString();
  74.   void SetString(LPCTSTR szMenuText);
  75. #if defined(_DEBUG) || defined(_AFXDLL)
  76.   // Diagnostic Support
  77.   virtual void AssertValid() const;
  78.   virtual void Dump(CDumpContext& dc) const;
  79. #endif
  80. public:
  81.   CString m_szMenuText;
  82.   UINT m_nTitleFlags;
  83.   UINT m_nFlags;
  84.   UINT m_nID;
  85.   UINT m_nSyncFlag;
  86.   int m_nxOffset;
  87.   int m_nMenuIconNormal;
  88.   CImageList* m_pBitmap;
  89.   void* m_pData;
  90. };
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CNewMenu the new menu class
  93. class GUILIBDLLEXPORT  CNewMenu : public CMenu
  94. {
  95.   friend class CNewMenuHook;
  96.   DECLARE_DYNCREATE(CNewMenu)
  97. public:
  98.   // how the menu's are drawn, either original or XP style
  99.   typedef enum 
  100.   { 
  101.     STYLE_ORIGINAL,
  102.     STYLE_ORIGINAL_NOBORDER,
  103.     STYLE_XP,
  104.     STYLE_XP_NOBORDER,
  105.     STYLE_SPECIAL,
  106.     STYLE_SPECIAL_NOBORDER
  107.   } EDrawStyle;
  108.   // how seperators are handled when removing a menu (Tongzhe Cui)
  109.   typedef enum {NONE, HEAD, TAIL, BOTH} ESeperator;
  110. public:
  111.   CNewMenu(HMENU hParent=0); 
  112.   virtual ~CNewMenu();
  113.   // Functions for loading and applying bitmaps to menus (see example application)
  114.   virtual BOOL LoadMenu(HMENU hMenu);
  115.   virtual BOOL LoadMenu(LPCTSTR lpszResourceName);
  116.   virtual BOOL LoadMenu(int nResource);
  117.   BOOL LoadToolBar(WORD* pToolInfo, COLORREF crTransparent=CLR_NONE);
  118.   BOOL LoadToolBar(LPCTSTR lpszResourceName);
  119.   BOOL LoadToolBar(UINT nToolBar);
  120.   BOOL LoadToolBars(const UINT *arID,int n);
  121.   void AddFromToolBar(CToolBar* pToolBar, int nResourceID);
  122.   BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset);
  123.   BOOL AddBitmapToImageList(CImageList *list,UINT nResourceID);
  124.   static HBITMAP LoadSysColorBitmap(int nResourceId);
  125.   // custom check mark bitmaps
  126.   void LoadCheckmarkBitmap(int unselect, int select); 
  127.   // functions for appending a menu option, use the AppendMenu call
  128.   BOOL AppendMenu(UINT nFlags,UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL,int nIconNormal=-1);
  129.   BOOL AppendMenu(UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CImageList *il,int xoffset);
  130.   BOOL AppendMenu(UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CBitmap *bmp);
  131.   BOOL AppendODMenu(LPCTSTR lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);  
  132.   BOOL AppendODMenu(LPCTSTR lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
  133.   // for appending a popup menu (see example application)
  134.   CNewMenu* AppendODPopupMenu(LPCTSTR lpstrText);
  135.   // functions for inserting a menu option, use the InsertMenu call (see above define)
  136.   BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL,int nIconNormal=-1);
  137.   BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CImageList *il,int xoffset);
  138.   BOOL InsertMenu(UINT nPosition,UINT nFlags,UINT nIDNewItem,LPCTSTR lpszNewItem,CBitmap *bmp);
  139.   BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);  
  140.   BOOL InsertODMenu(UINT nPosition,LPCTSTR lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
  141.   // functions for modifying a menu option, use the ModifyODMenu call (see above define)
  142.   BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID=0,int nIconNormal=-1);
  143.   BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID,CImageList *il,int xoffset);
  144.   BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID,CBitmap *bmp);
  145.   BOOL ModifyODMenu(LPCTSTR lpstrText,LPCTSTR OptionText,int nIconNormal);
  146.   // use this method for adding a solid/hatched colored square beside a menu option
  147.   // courtesy of Warren Stevens
  148.   BOOL ModifyODMenu(LPCTSTR lpstrText,UINT nID,COLORREF fill,COLORREF border,int hatchstyle=-1);
  149.   // for deleting and removing menu options
  150.   BOOL  DeleteMenu(UINT uiId,UINT nFlags);
  151.   BOOL  RemoveMenu(UINT uiId,UINT nFlags);
  152.   int RemoveMenu(LPCTSTR pText, ESeperator sPos=CNewMenu::NONE);
  153.   // function for retrieving and setting a menu options text (use this function
  154.   // because it is ownerdrawn)
  155.   BOOL GetMenuText(UINT id,CString &string,UINT nFlags = MF_BYPOSITION);
  156.   BOOL SetMenuText(UINT id,CString string, UINT nFlags = MF_BYPOSITION);
  157.   // Getting a submenu from it's name or position
  158.   CMenu* GetSubMenu (LPCTSTR lpszSubMenuName);
  159.   CMenu* GetSubMenu (int nPos);
  160.   int GetMenuPosition(LPCTSTR pText);
  161.   // Destoying
  162.   virtual BOOL DestroyMenu();
  163.   // Drawing: 
  164.   // Draw an item
  165.   virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);
  166.   // Measure an item  
  167.   virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
  168.   // Draw title of the menu
  169.   virtual void DrawTitle(LPDRAWITEMSTRUCT lpDIS,BOOL bIsMenuBar);
  170.   // Erase the Background of the menu
  171.   virtual BOOL EraseBkgnd(HWND hWnd,HDC hDC);
  172.   BOOL SetMenuTitle(LPCTSTR pTitle,UINT nTitleFlags=MFT_TOP_TITLE);
  173.   BOOL RemoveMenuTitle();
  174.   // Function to set how menu is drawn, either original or XP style
  175.   static int  GetMenuDrawMode();
  176.   static void SetMenuDrawMode(UINT mode);
  177.   // Function to set how disabled items are drawn 
  178.   //(mode=FALSE means they are not drawn selected)
  179.   static BOOL SetSelectDisableMode(BOOL mode);
  180.   static BOOL GetSelectDisableMode();
  181.   // Static functions used for handling menu's in the mainframe
  182.   static LRESULT FindKeyboardShortcut(UINT nChar,UINT nFlags,CMenu *pMenu);
  183.   static BOOL OnMeasureItem(const MSG* pMsg);
  184.   static void OnInitMenuPopup(HWND hWnd, CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
  185.   static CMenu* FindPopupMenuFromID(CMenu* pMenu, UINT nID);
  186.   static CMenu* FindPopupMenuFromID(HMENU hMenu, UINT nID);
  187.   static CMenu* FindPopupMenuFromIDData(CMenu* pMenu, UINT nID, ULONG_PTR pData);
  188.   static CMenu* FindPopupMenuFromIDData(HMENU hMenu, UINT nID, ULONG_PTR pData);
  189.   virtual void OnInitMenuPopup();
  190.   virtual BOOL OnUnInitPopupMenu();
  191.   // Customizing:
  192.   // Set icon size
  193.   void SetIconSize (int, int); 
  194.   // set the color in the bitmaps that is the background transparent color
  195.   COLORREF SetBitmapBackground(COLORREF newColor);
  196.   COLORREF GetBitmapBackground(); 
  197.   CRect GetLastActiveMenuRect();
  198.   HMENU GetParent();
  199.   BOOL IsPopup();
  200. // Miscellaneous Protected Member functions
  201. protected:
  202.   BOOL Replace(UINT nID,UINT nNewID);
  203.   static BOOL IsNewShell();
  204.   BOOL IsMenuBar(HMENU hMenu=NULL);
  205.   void SetLastMenuRect(HDC hDC, LPRECT pRect);
  206.   CNewMenuItemData* FindMenuItem(UINT nID);
  207.   CNewMenu* FindMenuOption(int nId, int& nLoc);
  208.   CNewMenu* FindMenuOption(LPCTSTR lpstrText, int& nLoc);
  209.   CNewMenu* FindAnotherMenuOption(int nId,int& nLoc,CArray<CNewMenu*,CNewMenu*>&newSubs,CArray<int,int&>&newLocs);
  210.   void DrawCheckMark(CDC* pDC,int x,int y,COLORREF color);
  211.   void DrawRadioDot(CDC* pDC,int x,int y,COLORREF color);
  212.   CNewMenuItemData* NewODMenu(UINT pos,UINT nFlags,UINT nID,LPCTSTR string);
  213.   void SynchronizeMenu();
  214.   void InitializeMenuList(int value);
  215.   void DeleteMenuList();
  216.   
  217.   CNewMenuItemData* FindMenuList(UINT nID);
  218.   void DrawSpecial_OldStyle(CDC* pDC, LPCRECT pRect, UINT nID, DWORD dwStyle);
  219.   void DrawSpecial_WinXP(CDC* pDC, LPCRECT pRect, UINT nID, DWORD dwStyle);
  220.   void DrawSpecialCharStyle(CDC* pDC, LPCRECT pRect, TCHAR Sign, DWORD dwStyle);
  221.   void DrawSpecialChar(CDC* pDC, LPCRECT pRect, TCHAR Sign, BOOL bBold);
  222.   void DrawMenuTitle(LPDRAWITEMSTRUCT lpDIS, BOOL bIsMenuBar);
  223.   // Measure an item
  224.   void MeasureItem_OldStyle( LPMEASUREITEMSTRUCT lpMIS, BOOL bIsMenuBar); 
  225.   void DrawItem_OldStyle (LPDRAWITEMSTRUCT lpDIS, BOOL bIsMenubar);
  226.   BOOL Draw3DCheckmark(CDC* dc, const CRect& rc,HBITMAP hbmCheck, DWORD dwStyle);
  227.   void MeasureItem_WinXP( LPMEASUREITEMSTRUCT lpMIS, BOOL bIsMenuBar); 
  228.   void DrawItem_WinXP (LPDRAWITEMSTRUCT lpDIS, BOOL bIsMenuBar);
  229.   void DrawItem_SpecialStyle (LPDRAWITEMSTRUCT lpDIS, BOOL bIsMenubar);
  230.   BOOL ImageListDuplicate(CImageList* il,int xoffset,CImageList* newlist);
  231.   static WORD NumBitmapColors(LPBITMAPINFOHEADER lpBitmap);
  232.   void ColorBitmap(CDC* pDC, CBitmap& bmp,CSize size,COLORREF fill,COLORREF border,int hatchstyle=-1);
  233.   void SetMBar(CMenuButton *pBar);
  234. // Member Variables
  235. public:
  236.   static int cCOLOR_MENUBAR;
  237.  
  238. protected: 
  239.   // Stores list of menu items
  240.   CTypedPtrArray<CPtrArray, CNewMenuItemData*> m_MenuList;   
  241.   // When loading an owner-drawn menu using a Resource, CNewMenu must keep track of
  242.   // the popup menu's that it creates. Warning, this list *MUST* be destroyed
  243.   // last item first :)
  244.   // Stores list of sub-menus
  245.   CTypedPtrArray<CPtrArray, HMENU>  m_SubMenus;
  246.   // Stores a list of all CNewMenu's ever created 
  247.   static CTypedPtrArray<CPtrArray, HMENU>  m_AllSubMenus;
  248.   static BOOL m_bSelectDisable;
  249.   static CMenuTheme* m_pActMenuDrawing;
  250.   
  251.   int m_iconX;
  252.   int m_iconY;
  253.   COLORREF m_bitmapBackground;
  254.   CImageList* checkmaps;
  255.   BOOL checkmapsshare;
  256.   int m_selectcheck;
  257.   int m_unselectcheck;
  258.   BOOL m_bDynIcons;
  259.   HMENU m_hParentMenu;
  260.   BOOL m_bIsPopupMenu;
  261.   CRect m_LastActiveMenuRect;
  262.   DWORD m_dwOpenMenu;
  263. };
  264. #pragma warning(pop)
  265. #endif // __CNewMenu_H_