COOLMENU.H
上传用户:gzfeiyu199
上传日期:2021-09-15
资源大小:68k
文件大小:4k
源码类别:

编辑框

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // 1997 Microsoft Systems Journal. 
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. //
  6. #if !defined(COOLMENU_H_INCLUDED)
  7. #define COOLMENU_H_INCLUDED
  8. #if _MSC_VER >= 1000
  9. #pragma once
  10. #endif // _MSC_VER >= 1000
  11. #include "SubClass.h"
  12. namespace PxLib
  13. {
  14. extern void FillRect(CDC& dc, const CRect& rc, COLORREF color);
  15. extern void DrawEmbossed(CDC& dc, CImageList& il, int i,
  16. CPoint p, BOOL bColor=FALSE);
  17. extern HBITMAP LoadSysColorBitmap(LPCTSTR lpResName, BOOL bMono=FALSE);
  18. inline HBITMAP LoadSysColorBitmap(UINT nResID, BOOL bMono=FALSE) {
  19. return LoadSysColorBitmap(MAKEINTRESOURCE(nResID), bMono);
  20. }
  21. } // end namespace
  22. //////////////////
  23. // CCoolMenuManager implements "cool" menus with buttons in them. To use:
  24. //
  25. //  * Instantiate in your CMainFrame.
  26. //  * Call Install to install it
  27. //  * Call LoadToolbars or LoadToolbar to load toolbars
  28. //
  29. //  Don't forget to link with CoolMenu.cpp, Subclass.cpp and DrawTool.cpp!
  30. //
  31. class CLASS_EXPORT CCoolMenuManager : private CSubclassWnd
  32. {
  33. DECLARE_DYNAMIC(CCoolMenuManager)
  34. public:
  35. CCoolMenuManager();
  36. ~CCoolMenuManager();
  37. // You can set these any time
  38. BOOL m_bShowButtons; // use to control whether buttons are shown
  39. BOOL m_bAutoAccel; // generate auto accelerators
  40. BOOL m_bUseDrawState; // use ::DrawState for disabled buttons
  41. BOOL m_bDrawDisabledButtonsInColor; // draw disabled buttons in color
  42. // (only if m_bUseDrawState = FALSE)
  43. // public functions to use
  44. void Install(CFrameWnd* pFrame); // connect to main frame
  45. BOOL LoadToolbars(const UINT* arIDs, int n); // load multiple toolbars
  46. BOOL LoadToolbar(UINT nID); // load one toolbar
  47. BOOL AddSingleBitmap(UINT nBitmapID, UINT n, UINT *nID);
  48. // should never need to call:
  49. virtual void Destroy(); // destroys everything--to re-load new toolbars?
  50. virtual void Refresh(); // called when system colors, etc change
  51. static  HBITMAP GetMFCDotBitmap(); // get..
  52. static  void    FixMFCDotBitmap(); // and fix MFC's dot bitmap
  53. static BOOL bTRACE; // Set TRUE to see extra diagnostics in DEBUG code
  54. protected:
  55. CFrameWnd* m_pFrame; // frame window I belong to
  56. CUIntArray m_arToolbarID; // array of toolbar IDs loaded
  57. CImageList m_ilButtons; // image list for all buttons
  58. CMapWordToPtr m_mapIDtoImage;// maps command ID -> image list index
  59. CMapWordToPtr m_mapIDtoAccel;// maps command ID -> ACCEL*
  60. HACCEL m_hAccel; // current accelerators, if any
  61. ACCEL* m_pAccel; // ..and table in memory
  62. CPtrList m_menuList; // list of HMENU's initialized
  63. CSize m_szBitmap; // size of button bitmap
  64. CSize m_szButton; // size of button (including shadow)
  65. CFont m_fontMenu; // menu font
  66. // helpers
  67. void DestroyAccel();
  68. void DrawMenuText(CDC& dc, CRect rc, CString text, COLORREF color);
  69. BOOL Draw3DCheckmark(CDC& dc, const CRect& rc, BOOL bSelected,
  70. HBITMAP hbmCheck=NULL);
  71. void ConvertMenu(CMenu* pMenu,UINT nIndex,BOOL bSysMenu,BOOL bShowButtons);
  72. void LoadAccel(HACCEL hAccel);
  73. BOOL AppendAccelName(CString& sItemName, UINT nID);
  74. CFont* GetMenuFont();
  75. // Get button index for given command ID, or -1 if not found
  76. int  GetButtonIndex(WORD nID) {
  77. void* val;
  78. return m_mapIDtoImage.Lookup(nID, val) ? (int)val : -1;
  79. }
  80. // Get ACCEL structure associated with a given command ID
  81. ACCEL* GetAccel(WORD nID) {
  82. void* val;
  83. return m_mapIDtoAccel.Lookup(nID, val) ? (ACCEL*)val : NULL;
  84. }
  85. // window proc to hook frame using CSubclassWnd implementation
  86. virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  87. // CSubclassWnd message handlers 
  88. virtual void OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu);
  89. virtual BOOL OnMeasureItem(LPMEASUREITEMSTRUCT lpms);
  90. virtual BOOL OnDrawItem(LPDRAWITEMSTRUCT lpds);
  91. virtual LONG OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu);
  92. virtual void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
  93. };
  94. //////////////////
  95. // Friendly version of MENUITEMINFO initializes itself
  96. //
  97. struct CMenuItemInfo : public MENUITEMINFO {
  98. CMenuItemInfo()
  99. { memset(this, 0, sizeof(MENUITEMINFO));
  100.   cbSize = sizeof(MENUITEMINFO);
  101. }
  102. };
  103. #endif