MenuEx.h
上传用户:lj3531212
上传日期:2007-06-18
资源大小:346k
文件大小:3k
源码类别:

绘图程序

开发平台:

Visual C++

  1. // MenuEx.h: interface for the CMenuEx class.
  2. //CMenuEx
  3. //接口:
  4. // void InitMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar)
  5. // void InitPopupMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar)
  6. // 与InitMenu不同的是:InitMenu并不修改第一级菜单为自绘风格,而
  7. // 该函数有包括第一级菜单但必须注意:该类的任一实例都只能调用这
  8. // 两个函数中的一个,不能一同使用
  9. // void SetHighLightColor(COLORREF crColor)
  10. // void SetBackColor(COLORREF)
  11. // void SetTextColor(COLORREF)
  12. // void SetImageLeft(UINT idBmpLeft)
  13. // 作者:lbird(郑恒)
  14. // 2003.1.10 zh0116@163.net QQ:10992445
  15. //////////////////////////////////////////////////////////////////////
  16. #if !defined(AFX_MENUEX_H__FE677F6B_2315_11D7_8869_BB2B2A4F4D45__INCLUDED_)
  17. #define AFX_MENUEX_H__FE677F6B_2315_11D7_8869_BB2B2A4F4D45__INCLUDED_
  18. #include "afxtempl.h"
  19. #if _MSC_VER > 1000
  20. #pragma once
  21. #endif // _MSC_VER > 1000
  22. typedef struct tagMENUITEM
  23. {
  24. CString strText;
  25. UINT uID;
  26. #ifdef MENUCHAR
  27. UINT uChr;
  28. #endif
  29. UINT uIndex;
  30. int  uPositionImageLeft;
  31. }MENUITEM;
  32. typedef MENUITEM * LPMENUITEM;
  33. ///////////////////////////////////////////
  34. class CMenuEx : public CMenu  
  35. {
  36. public:
  37. void InitPopupMenu(CMenu *pPopupMenu,UINT uToolBar,CToolBar *pToolBar);
  38. void ChangeStyle(CMenu *pMenu,CToolBar *pToolBar,BOOL bIsMainMenu=FALSE);
  39. void SetHighLightColor(COLORREF crColor);
  40. void SetBackColor(COLORREF);
  41. void SetTextColor(COLORREF);
  42. #ifdef MENUCHAR
  43. LRESULT MenuChar(UINT nChar);
  44. #endif
  45. void SetImageLeft(UINT idBmpLeft);
  46. void MeasureItem(LPMEASUREITEMSTRUCT  lpMIS);
  47. void InitMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar);
  48. void DrawItem(LPDRAWITEMSTRUCT lpDIS);
  49. void DeleteItem(UINT nID);
  50. CMenuEx();
  51. virtual ~CMenuEx();
  52. protected:
  53. int m_nSeparator;
  54. CSize m_szImageLeft;
  55. CBitmap m_bmpImageLeft;
  56. int m_nWidthLeftImage;
  57. BOOL m_bHasImageLeft; //是否有侧边位图
  58. public:
  59. BOOL m_bInitial; //菜单是否已初始化,即设定了自绘风格
  60. int GetImageFromToolBar(UINT uToolBar,CToolBar *pToolBar,COLORREF crMask=RGB(192,192,192));
  61. CList<MENUITEM *,MENUITEM *> m_ListMenu;
  62. #ifdef MENUCHAR
  63. CList<MENUITEM *,MENUITEM *> m_currentListMenu; //是m_ListMenu的子集,指当前打开的菜单
  64. #endif
  65. COLORREF m_colMenu;
  66. COLORREF m_colTextSelected;
  67. void DrawImageLeft(CDC *pDC,CRect &rect,LPMENUITEM lpItem);
  68. void TextMenu(CDC *pDC,CRect &rect,CRect rtText,BOOL bSelected,BOOL bGrayed,LPMENUITEM lpItem);
  69. CImageList m_ImageList;
  70. COLORREF m_colText;
  71. CSize m_szImage; //菜单项位图的大小
  72. void DrawMenuItemImage(CDC *pDC,CRect &rect,BOOL bSelected,BOOL bChecked,BOOL bGrayed,BOOL bHasImage,LPMENUITEM lpItem);
  73. void GrayString(CDC *pDC,const CString &str,const CRect rect);
  74. };
  75. #endif // !defined(AFX_MENUEX_H__FE677F6B_2315_11D7_8869_BB2B2A4F4D45__INCLUDED_)