BCMenu.h
上传用户:aphuaqiang
上传日期:2007-01-02
资源大小:62k
文件大小:5k
源码类别:

菜单

开发平台:

Visual C++

  1. //*************************************************************************
  2. // BCMenu.h : header file
  3. // Version : 2.4
  4. // Date : Feb 11, 1999
  5. // Author : Brent Corkum
  6. // 
  7. // Portions of code supplied by:
  8. // Ben Ashley,Girish Bharadwaj,Jean-Edouard Lachand-Robert,
  9. // Robert Edward Caldecott,Kenny Goers,Leonardo Zide,
  10. // Stefan Kuhr
  11. //
  12. // Bug Fixes:
  13. // Stefan Kuhr,Martin Vladic,Kim Yoo Chul
  14. //
  15. // You are free to use/modify this code but leave this header intact.
  16. //
  17. #ifndef BCMenu_H
  18. #define BCMenu_H
  19. #include <afxtempl.h>
  20. // BCMenuData class. Fill this class structure to define a single menu item:
  21. class BCMenuData
  22. {
  23. wchar_t *m_szMenuText;
  24. public:
  25. BCMenuData () {menuIconNormal=-1;xoffset=-1;bitmap=NULL;
  26.                nFlags=0;nID=0;syncflag=0;m_szMenuText=NULL;};
  27. void SetAnsiString(LPCSTR szAnsiString);
  28. void SetWideString(const wchar_t *szWideString);
  29. const wchar_t *GetWideString(void) {return m_szMenuText;};
  30. ~BCMenuData ();
  31. CString GetString(void);//returns the menu text in ANSI or UNICODE
  32. int xoffset;
  33. int menuIconNormal;
  34. UINT nFlags,nID,syncflag;
  35. CImageList *bitmap;
  36. };
  37. //struct CMenuItemInfo : public MENUITEMINFO {
  38. struct CMenuItemInfo : public 
  39. //MENUITEMINFO 
  40. #ifndef UNICODE   //SK: this fixes warning C4097: typedef-name 'MENUITEMINFO' used as synonym for class-name 'tagMENUITEMINFOA'
  41. tagMENUITEMINFOA
  42. #else
  43. tagMENUITEMINFOW
  44. #endif
  45.     {
  46. CMenuItemInfo()
  47. { memset(this, 0, sizeof(MENUITEMINFO));
  48.   cbSize = sizeof(MENUITEMINFO);
  49. }
  50. };
  51. typedef enum {Normal,TextOnly} HIGHLIGHTSTYLE;
  52. #ifndef UNICODE
  53. #define AppendODMenu AppendODMenuA
  54. #define ModifyODMenu ModifyODMenuA
  55. #else
  56. #define AppendODMenu AppendODMenuW
  57. #define ModifyODMenu ModifyODMenuW
  58. #endif
  59. class BCMenu : public CMenu  // Derived from CMenu
  60. {
  61. // Construction
  62. public:
  63. BCMenu(); 
  64. // Attributes
  65. protected:
  66. CTypedPtrArray<CPtrArray, BCMenuData*> m_MenuList;  // Stores list of menu items 
  67. // When loading an owner-drawn menu using a Resource, BCMenu must keep track of
  68. // the popup menu's that it creates. Warning, this list *MUST* be destroyed
  69. // last item first :)
  70. CTypedPtrArray<CPtrArray, BCMenu*>  m_SubMenus;  // Stores list of sub-menus 
  71. // Operations
  72. public: 
  73. // Overrides
  74. // ClassWizard generated virtual function overrides
  75. //{{AFX_VIRTUAL(CCustomMenu)
  76. //}}AFX_VIRTUAL 
  77. // Implementation
  78. public:
  79.   static BOOL IsNewShell(void);
  80.   void SetBitmapBackground(COLORREF color);
  81.   void SetDisableOldStyle(void);
  82.   void UnSetDisableOldStyle(void);
  83.   BOOL GetDisableOldStyle(void);
  84.   void UnSetBitmapBackground(void);
  85.   int AddBitmapToImageList(CImageList *list,UINT nResourceID);
  86.   BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset);
  87.   void InsertSpaces(void);
  88.   static LRESULT FindKeyboardShortcut(UINT nChar,UINT nFlags,CMenu *pMenu);
  89.   static void UpdateMenu(CMenu *pmenu);
  90.   BOOL IsMenu(CMenu *submenu);
  91.   void DrawCheckMark(CDC *pDC,int x,int y,COLORREF color);
  92.   void DrawRadioDot(CDC *pDC,int x,int y,COLORREF color);
  93.   BCMenu *FindMenuOption(int nId,int& nLoc);
  94.   BCMenuData *FindMenuOption(wchar_t *lpstrText);
  95.   BOOL GetMenuText(UINT id,CString &string);
  96.   CImageList *checkmaps;
  97.   BOOL checkmapsshare;
  98.   int m_selectcheck;
  99.   int m_unselectcheck;
  100.   void LoadCheckmarkBitmap(int unselect,int select);
  101.   void DitherBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, 
  102.                  int nHeight, HBITMAP hbm, int nXSrc, int nYSrc);
  103.   void DitherBlt2(CDC *drawdc, int nXDest, int nYDest, int nWidth, 
  104.                   int nHeight, CBitmap &bmp, int nXSrc, int nYSrc);
  105.   HBITMAP LoadSysColorBitmap(int nResourceId);
  106. virtual ~BCMenu();  // Virtual Destructor 
  107. // Drawing: 
  108. virtual void DrawItem( LPDRAWITEMSTRUCT);  // Draw an item
  109. virtual void MeasureItem( LPMEASUREITEMSTRUCT );  // Measure an item
  110. // Customizing:
  111. void SetIconSize (int, int);  // Set icon size
  112. BOOL AppendODMenuA(LPCSTR lpstrText, 
  113. UINT nFlags = MF_OWNERDRAW,
  114. UINT nID = 0,
  115. int nIconNormal = -1); // Owner-Drawn Append 
  116. BOOL AppendODMenuW(wchar_t *lpstrText, 
  117. UINT nFlags = MF_OWNERDRAW,
  118. UINT nID = 0,
  119. int nIconNormal = -1); // Owner-Drawn Append 
  120. BOOL ModifyODMenuA(const char *lpstrText,UINT nID=0,int nIconNormal=-1);
  121. BOOL ModifyODMenuA(const char *lpstrText,const char *OptionText,int nIconNormal);
  122. BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID=0,int nIconNormal=-1);
  123. BOOL ModifyODMenuW(wchar_t *lpstrText,wchar_t *OptionText,int nIconNormal);
  124. BCMenuData *NewODMenu(UINT pos,UINT nFlags,UINT nID,CString string);
  125. void SynchronizeMenu(void);
  126. void BCMenu::InitializeMenuList(int value);
  127. void BCMenu::DeleteMenuList(void);
  128. BCMenuData *BCMenu::FindMenuList(UINT nID);
  129. virtual BOOL LoadMenu(LPCTSTR lpszResourceName);  // Load a menu
  130. virtual BOOL LoadMenu(int nResource);  // ... 
  131. void AddFromToolBar(CToolBar* pToolBar, int nResourceID);
  132. BOOL Draw3DCheckmark(CDC *dc, const CRect& rc,BOOL bSelected,
  133.                      HBITMAP hbmCheck);
  134. BOOL LoadToolbar(UINT nToolBar);
  135. BOOL LoadToolbars(const UINT *arID,int n);
  136. // Destoying:
  137. virtual BOOL DestroyMenu();
  138. // Generated message map functions
  139. protected:
  140. int m_iconX,m_iconY;
  141. COLORREF m_bitmapBackground;
  142. BOOL m_bitmapBackgroundFlag;
  143. BOOL disable_old_style;
  144. }; 
  145. #endif
  146. //*************************************************************************