ODMenu.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #ifndef _ODMENU_CLW
  2. #define _ODMENU_CLW
  3. #include <windows.h>
  4. #include <map>
  5. #include <string>
  6. using namespace std;
  7. enum bitmapType {eNormal, eDisabled, eShadow, eFaded};
  8. typedef struct tagODMENUITEM 
  9. {
  10.     UINT dwType;
  11.     UINT wID;
  12.     string rawText;
  13.     string displayText;
  14.     string rawDisplayText;
  15.     string shortcutText;
  16.     HBITMAP hBitmap;
  17.     bool topMost;
  18. } ODMENUITEM;
  19. typedef map<UINT, ODMENUITEM> ODMENUITEMS;
  20. class ODMenu
  21. {
  22.     //Aesthetic parameters
  23.     COLORREF m_clrIconBar;
  24.     COLORREF m_clrTranparent;
  25.     COLORREF m_clrItemText;
  26.     COLORREF m_clrItemBackground;
  27.     COLORREF m_clrHighlightItemText;
  28.     COLORREF m_clrHighlightItemBackground;
  29.     COLORREF m_clrHighlightItemOutline;
  30.     COLORREF m_clrSeparator;
  31.     COLORREF m_clrIconShadow;
  32.     COLORREF m_clrCheckMark;
  33.     COLORREF m_clrCheckMarkBackground;
  34.     COLORREF m_clrCheckMarkBackgroundHighlight;
  35.     UINT m_iconBarMargin;
  36.     UINT m_iconWidth;
  37.     UINT m_iconHeight;
  38.     UINT m_textLeftMargin;
  39.     UINT m_textRightMargin;
  40.     UINT m_verticalSpacing;
  41.     //GDI object handles
  42.     HBRUSH m_hIconBarBrush;
  43.     HBRUSH m_hIconShadowBrush;
  44.     HBRUSH m_hCheckMarkBackgroundBrush;
  45.     HBRUSH m_hCheckMarkBackgroundHighlightBrush;
  46. HBRUSH m_hItemBackground;
  47.     HBRUSH m_hHighlightItemBackgroundBrush;
  48.     HPEN m_hSelectionOutlinePen;
  49.     HPEN m_hSeparatorPen;
  50.     HPEN m_hCheckMarkPen;
  51.     HFONT m_hFont;
  52.     
  53.     UINT m_seqNumber;
  54.     HMENU m_hRootMenu;
  55.     TCHAR m_szItemText[256];
  56.     ODMENUITEMS m_menuItems;
  57.     
  58.     int m_alpDx[256];
  59.     void EnumMenuItems(HMENU hMenu);
  60.     void DeleteSubMenu(HMENU hMenu);
  61.     void SetMenuItemOwnerDrawn(HMENU hMenu, UINT item, UINT type);
  62.     void GenerateDisplayText(ODMENUITEM& item);
  63.     void DrawItemText(DRAWITEMSTRUCT* lpdis, ODMENUITEM& item);
  64.     void DrawIconBar(DRAWITEMSTRUCT* lpdis, ODMENUITEM& item);
  65.     void ComputeMenuTextPos(DRAWITEMSTRUCT* lpdis, ODMENUITEM& item, int& x, int& y, SIZE& size);
  66.     void DrawTransparentBitmap(HDC hDC, HBITMAP hBitmap, short xStart, short yStart,
  67.             COLORREF cTransparentColor, bitmapType eType=eNormal);
  68.     void DrawCheckMark(HDC hDC, short x, short y, bool bNarrow=true);
  69.     COLORREF LightenColor(COLORREF col, double factor);
  70.     COLORREF DarkenColor(COLORREF col, double factor);
  71.     COLORREF AverageColor(COLORREF col1, COLORREF col2, double weight1=0.5);
  72.     double GetColorIntensity(COLORREF col);
  73. public:
  74.     ODMenu();
  75.     ~ODMenu();
  76.     bool Init(HWND hOwnerWnd, HMENU hMenu);
  77.     void MeasureItem(HWND hWnd, LPARAM lParam);
  78.     void DrawItem(HWND hWnd, LPARAM lParam);
  79.     void OnDestroy();
  80.     bool GetItem(UINT id, ODMENUITEM** ppItem);
  81.     void SetItemImage(HINSTANCE hInst, UINT wID, UINT idBitmap);
  82.     void AddItem(HMENU hMenu, int index, MENUITEMINFO* pItemInfo=NULL);
  83.     void DeleteItem(HMENU hMenu, int index);
  84. };
  85. #endif