GuiDrawLayer.h
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:9k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  * (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software; so you are free to use it any of your *
  9.  * applications(Freeware, Shareware, Commercial), but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * Created by: Francisco Campos G. *
  18.  * Bug Fixes and improvements :(Add your name) *
  19.  * -Francisco Campos *
  20.  * *
  21.  ****************************************************************************/
  22. #if !defined(AFX_GUIDRAWLAYER_H__0BFB5AA0_94B4_47FC_8F93_84DB87A364F8__INCLUDED_)
  23. #define AFX_GUIDRAWLAYER_H__0BFB5AA0_94B4_47FC_8F93_84DB87A364F8__INCLUDED_
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "GuiNormalButton.h"
  28. #include "VisualStylesXP.h"
  29. #define NORMALBTN   1
  30. #define OVERBTN     1
  31. #define PRESSBTN    2
  32. class GUILIBDLLEXPORT CGuiControlBarButton 
  33. {
  34. public:
  35. enum GuiType
  36. {
  37. GUINORMAL    = 0,
  38. GUITOOLBUTTON
  39. };
  40. CRect rcArea;
  41. protected:
  42. int m_nIcon;
  43. LPCTSTR m_lpMsg;
  44. CImageList m_imgList;
  45. GuiType bTypeButton;
  46. BOOL m_bEnabled;
  47. CToolTipCtrl   m_toolTip;
  48. public:
  49. CGuiControlBarButton();
  50. void SetData(int nIcon, LPCTSTR lpMsg);
  51. ~CGuiControlBarButton();
  52. void Paint(CDC* pDC, int st, CRect rc, COLORREF clrFondo,BOOL isBackDark=FALSE);
  53. void SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask);
  54. void SetTypeButton(GuiType bTypeb = GUINORMAL);
  55. void SetEnabled(BOOL bEnabled);
  56. };
  57. class GUILIBDLLEXPORT GuiTabbedButton: public CGuiToolButton
  58. {
  59. public:
  60. GuiTabbedButton();
  61. virtual ~GuiTabbedButton();
  62. protected:
  63. BOOL bPress;
  64. int m_iMilliseconds;
  65. public:
  66. void SetWait(int iMilliseconds = 50)
  67. {
  68. m_iMilliseconds = iMilliseconds;
  69. };
  70. protected:
  71. DECLARE_MESSAGE_MAP()
  72. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  73. afx_msg void OnTimer(UINT nIDEvent);
  74. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  75. afx_msg void OnSysColorChange( );
  76. };
  77. class GUILIBDLLEXPORT GuiDrawLayer  
  78. {
  79. public:
  80. GuiDrawLayer();
  81. virtual ~GuiDrawLayer();
  82. public:
  83. static DWORD m_SO;
  84. static BOOL m_Theme;
  85. static DWORD m_Style;
  86. void DrawArrow(CDC* pDC, CRect m_rc, BOOL m_bDown = TRUE);
  87. HICON GetIcon(int nIcon);
  88. static HICON LoadIconLib(UINT uIcon);
  89. static COLORREF GetRGBColorXP();
  90. static COLORREF GetRGBFondoXP();
  91. static COLORREF GetRGBCaptionXP();
  92. static COLORREF GetRGBPressBXP();
  93. static COLORREF GetRGBColorFace(DWORD dwStyle=GUISTYLE_XP);
  94. static COLORREF GetRGBColorShadow(DWORD IsTheme2003=GUISTYLE_XP);
  95. static COLORREF GetRGBColorBTNHigh();
  96. static COLORREF GetRGBColorTabs();
  97. static COLORREF GetRGBColorWhite();
  98. static COLORREF GetRGBTitleMenu();
  99. static COLORREF GetRGBMenu();
  100. static COLORREF GetRGBColorGrayText();
  101. static void DrawCheck(CDC* pDC, CRect m_rcTemp);
  102. static BOOL IsGrayed();
  103. static void DrawShade(CRect Rect, CPoint cp, CDC* pDC);
  104. static COLORREF DarkenColor(long lScale, COLORREF lColor);
  105. static COLORREF GetRGBSkinMenu();
  106. //*icon routines
  107. static HICON LoadIcon(UINT hIcon)
  108. {
  109. HINSTANCE hirc = AfxFindResourceHandle(MAKEINTRESOURCE(hIcon), RT_BITMAP);
  110. if (hIcon != -1) 
  111. {
  112. return (HICON)::LoadImage(hirc, MAKEINTRESOURCE(hIcon), 
  113. IMAGE_ICON, 16, 16, LR_LOADMAP3DCOLORS);
  114. }
  115. return NULL;
  116. }
  117. static CSize GetSizeIcon(HICON hIcon)
  118. {
  119. CSize m_SizeImage;
  120. ICONINFO bm;
  121. ZeroMemory(&bm, sizeof(ICONINFO));
  122. ::GetIconInfo(hIcon,&bm);
  123. m_SizeImage =CSize((BYTE)(bm.xHotspot*2),(BYTE)(bm.yHotspot*2));
  124. ::DeleteObject(bm.hbmMask);
  125. ::DeleteObject(bm.hbmColor);
  126. return m_SizeImage;
  127. }
  128. static DrawIcon(CDC* pDC, CPoint m_point,CSize m_sizeImg,HICON hIcon,BOOL Enabled=TRUE)
  129. {
  130. pDC->DrawState(m_point, m_sizeImg, hIcon,
  131. (Enabled== FALSE ? DSS_DISABLED:DSS_NORMAL), (CBrush*)NULL);
  132. }
  133. //**
  134. static HINSTANCE hTheme;
  135. static int verSO()
  136. {
  137.    
  138. if (m_SO!=-1)
  139. return m_SO;
  140.    OSVERSIONINFOEX osvi;
  141.    BOOL bOsVersionInfoEx;
  142.    // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
  143.    //
  144.    // If that fails, try using the OSVERSIONINFO structure.
  145.    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  146.    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  147.    if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
  148.    {
  149.   // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
  150.   osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
  151.   if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
  152.  return FALSE;
  153.    }
  154.    switch (osvi.dwPlatformId)
  155.    {
  156.   case VER_PLATFORM_WIN32_NT:
  157.   // Test for the product.
  158.  if ( osvi.dwMajorVersion <= 4 )
  159. return m_SO=WIN_NT;
  160.  if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
  161. return m_SO=WIN_2000;;
  162.  if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
  163.     return m_SO=WIN_XP;
  164.   // Test for product type.
  165.  break;
  166.   case VER_PLATFORM_WIN32_WINDOWS:
  167.  if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
  168.  {
  169.  return WIN_95;
  170.  if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
  171. printf("OSR2 " );
  172.  } 
  173.  if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
  174.  {
  175.  return WIN_98;
  176.  if ( osvi.szCSDVersion[1] == 'A' )
  177. printf("SE " );
  178.  } 
  179.  if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
  180.  {
  181.  return m_SO=WIN_ME;
  182.  } 
  183.  break;
  184.   case VER_PLATFORM_WIN32s:
  185.  return m_SO=WIN_32;
  186.  break;
  187.    }
  188.    return -1; 
  189. }
  190. static BOOL IsThemeXP()
  191. {
  192. if (m_SO < WIN_XP) return FALSE;
  193. CVisualStylesXP  m_vsXP;
  194. if (m_Theme=m_vsXP.IsAppThemed())
  195. return TRUE;
  196. return FALSE;
  197. }
  198. static void GetNextColor(int nIndex, COLORREF& m_lowColor, COLORREF& m_HighColor)
  199. {
  200. int nResult= (nIndex >10 ) ? nIndex % 10 : nIndex;
  201. switch(nResult)
  202. {
  203. case 1:
  204. m_lowColor=RGB(255,255,255);
  205. m_HighColor=RGB (147,174,230);
  206. break;
  207. case 2:
  208. m_lowColor=RGB(255,255,255);
  209. m_HighColor=RGB( 255,223,133);
  210. break;
  211. case 3:
  212. m_lowColor=RGB(255,255,255);
  213. m_HighColor=RGB (210,221,189);
  214. break;
  215. case 4:
  216. m_lowColor=RGB(255,255,255);
  217. m_HighColor=RGB (244,189,189);
  218. break;
  219. case 5:
  220. m_lowColor=RGB(255,255,255);
  221. m_HighColor=RGB (210,198,235);
  222. break;
  223. case 6:
  224. m_lowColor=RGB(255,255,255);
  225. m_HighColor=RGB (186,211,204);
  226. break;
  227. case 7:
  228. m_lowColor=RGB(255,255,255);
  229. m_HighColor=RGB (247,202,165);
  230. break;
  231. case 8:
  232. m_lowColor=RGB(255,255,255);
  233. m_HighColor=RGB (219,177,197);
  234. break;
  235. case 9:
  236. m_lowColor=RGB(255,255,255);
  237. m_HighColor=RGB (180,199,237);
  238. break;
  239. case 10:
  240. m_lowColor=RGB(255,255,255);
  241. m_HighColor=RGB (244,189,189);
  242. break;
  243. default:
  244. m_lowColor=RGB(255,255,255);
  245. m_HighColor=RGB (247,202,165);
  246. }
  247. }
  248. protected:
  249. CImageList m_img;
  250. CPoint mHeight;
  251. int m_iWidthDrowDown;
  252. };
  253. class CGradient  
  254. {
  255. public:
  256. CGradient(CSize=CSize(800,600));
  257. virtual ~CGradient();
  258. //members
  259. virtual void PrepareVertical(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP,COLORREF m_clr=GuiDrawLayer::GetRGBColorTabs(), int nRate=30);
  260. virtual void PrepareVertical(CDC *pDC,UINT RTop,UINT GTop,UINT BTOP,UINT RBot,UINT GBot,UINT BBot);
  261. virtual void PrepareHorizontal(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP,COLORREF m_clr=GuiDrawLayer::GetRGBColorTabs());
  262. virtual void PrepareReverseHor(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP,COLORREF m_clr=GuiDrawLayer::GetRGBColorTabs());
  263. void PrepareTabs(CDC* pDC, COLORREF m_clrL,COLORREF m_clrH );
  264. void PrepareCaption(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP);
  265. void PrepareCaptionVert(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP);
  266. void PrepareReverseVert(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP, COLORREF m_clr=GuiDrawLayer::GetRGBColorTabs());
  267. void PrepareReverseVertTab(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP, COLORREF m_clr=GuiDrawLayer::GetRGBColorTabs());
  268. void PrepareReverseColorTab(CDC* pDC,DWORD m_StyleDisplay=GUISTYLE_XP, COLORREF m_clrL=GuiDrawLayer::GetRGBColorTabs(), COLORREF m_clrH=GuiDrawLayer::GetRGBColorTabs());
  269. void PrepareHorizontal(CDC *pDC,UINT RRight,UINT GRight,UINT BRight,UINT RLeft,UINT GLeft,UINT BLeft);
  270. CSize GetDimensions();
  271. void  SetDimensions(CSize Size);
  272. void Draw(CDC *pDC, int xDest,int yDest,int xSrc, int ySrc, int Width, int Height,DWORD Rop);
  273. protected:
  274. CDC *m_dcMem;
  275. CSize m_Size;
  276. };
  277. #endif // !defined(AFX_GUIDRAWLAYER_H__0BFB5AA0_94B4_47FC_8F93_84DB87A364F8__INCLUDED_)