SkinMenu.h
上传用户:weijiexitu
上传日期:2007-01-18
资源大小:54k
文件大小:3k
源码类别:

菜单

开发平台:

WINDOWS

  1. // SkinMenu.h: interface for the CSkinMenu class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_)
  5. #define AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #ifndef NO_SKIN_MENUS
  10. #include "subclass.h"
  11. #include "skinglobals.h"
  12. // style flags
  13. enum
  14. {
  15. SKMS_ROUNDCORNERS = 0x0001,
  16. SKMS_SIDEBAR = 0x0002,
  17. SKMS_FLAT = 0x0004,
  18. };
  19. class ISkinMenuRender
  20. {
  21. public:
  22. virtual BOOL DrawMenuBorder(CDC* pDC, LPRECT pRect) { return FALSE; }
  23. virtual BOOL DrawMenuSidebar(CDC* pDC, LPRECT pRect, LPCTSTR szTitle = NULL) { return FALSE; }
  24. virtual BOOL DrawMenuClientBkgnd(CDC* pDC, LPRECT pRect, LPRECT pClip) { return FALSE; }
  25. virtual BOOL DrawMenuNonClientBkgnd(CDC* pDC, LPRECT pRect) { return FALSE; }
  26. };
  27. class CSkinGlobals;
  28. class CSkinMenu : public CSubclassWnd
  29. {
  30. public:
  31. CSkinMenu(CSkinGlobals* pGlobals = NULL, DWORD dwStyle = SKMS_SIDEBAR, int nSBWidth = 10);
  32. virtual ~CSkinMenu();
  33. virtual BOOL AttachWindow(HWND hWnd);
  34. BOOL DetachWindow();
  35. void SetContextWnd(HWND hWnd);
  36. void SetMenu(HMENU hMenu, CSkinMenu* pParentMenu = NULL);
  37. const HMENU GetMenu() const { return m_hMenu; }
  38. static BOOL IsMenuWnd(HWND hWnd);
  39. static void SetRenderer(ISkinMenuRender* pRenderer) { s_pRenderer = pRenderer; }
  40. protected:
  41. int m_nSelIndex;
  42. DWORD m_dwStyle;
  43. CSkinGlobals* m_pGlobals;
  44. int m_nSidebarWidth;
  45. HWND m_hContextWnd;
  46. HMENU m_hMenu;
  47. CSkinMenu* m_pParentMenu;
  48. BOOL m_bAnimatedMenus;
  49. BOOL m_bFirstRedraw; // fix for animated menus
  50. static ISkinMenuRender* s_pRenderer;
  51. protected:
  52. virtual void OnNcPaint(CDC* pDC);
  53. virtual void OnPrintClient(CDC* pDC, DWORD dwFlags);
  54. virtual void OnPaint(CDC* pDC);
  55. virtual LRESULT WindowProc(HWND hRealWnd, UINT msg, WPARAM wp, LPARAM lp); 
  56. BOOL IsValid() { return IsHooked(); } // is it hooked up and ready to go
  57. void GetDrawRect(LPRECT pWindow, LPRECT pClient = NULL);
  58. void SetTransparent();
  59. CDC* ReplaceSystemColors(CDC* pDCDest, CDC* pDestSrc, LPRECT pRect, LPRECT pClip);
  60. void GetInvalidRect(int nCurSel, int nPrevSel, LPRECT lpRect); // in client coords
  61. int GetCurSel();
  62. // style helpers
  63. BOOL Sidebar() { return m_dwStyle & SKMS_SIDEBAR; }
  64. BOOL RoundCorners() { return m_dwStyle & SKMS_ROUNDCORNERS; }
  65. BOOL Flat() { return m_dwStyle & SKMS_FLAT; }
  66. static BOOL ReplaceColor(CDC* pDCSrc, COLORREF crSrc, CDC* pDCDest, COLORREF crDest, LPRECT pRect, LPRECT pClip);
  67. // CSkinGlobals wrappers
  68. COLORREF GetColor(int nColor);
  69. CFont* GetFont(int nFont);
  70. inline void SwapDCs(CDC*& pDC1, CDC*& pDC2)
  71. {
  72. CDC* pTemp = pDC1;
  73. pDC1 = pDC2;
  74. pDC2 = pTemp;
  75. }
  76. };
  77. #endif // NO_SKIN_CTRLS
  78. #endif // !defined(AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_)