GuiDrawLayer.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. #include "stdafx.h"
  14. #include "GuiDrawLayer.h"
  15. #include "resource.h"
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char THIS_FILE[]=__FILE__;
  19. #define new DEBUG_NEW
  20. #endif
  21. //////////////////////////////////////////////////////////////////////
  22. // Construction/Destruction
  23. //////////////////////////////////////////////////////////////////////
  24. COLORREF GuiDrawLayer::DarkenColor( long lScale, COLORREF lColor)
  25.   long R = MulDiv(GetRValue(lColor),(255-lScale),255);
  26.   long G = MulDiv(GetGValue(lColor),(255-lScale),255);
  27.   long B = MulDiv(GetBValue(lColor),(255-lScale),255);
  28.   return RGB(R, G, B); 
  29. }
  30. GuiDrawLayer::GuiDrawLayer()
  31. {
  32. if (!m_img.Create(IDB_DOCKBAR,9,10,RGB(255,0,255)))
  33. {
  34. TRACE0("error");
  35. }
  36. m_iWidthDrowDown=GetSystemMetrics(SM_CXHTHUMB);
  37. CBitmap cbmp;
  38. BITMAP bmp;
  39. cbmp.LoadBitmap(IDB_DOCKBAR);
  40. cbmp.GetBitmap(&bmp);
  41. mHeight=CPoint(bmp.bmWidth,bmp.bmHeight);
  42. }
  43. COLORREF GuiDrawLayer::GetRGBColorWhite()
  44. {
  45. return RGB(255,255,255);
  46. }
  47. COLORREF GuiDrawLayer::GetRGBColorTabs()
  48. {
  49. BYTE byRvalue =GetRValue(GetRGBColorXP());
  50. BYTE byGvalue =GetGValue(GetRGBColorXP());
  51. BYTE byBvalue =GetBValue(GetRGBColorXP());
  52. // byRvalue =byRvalue>>2;
  53. // byGvalue =byGvalue>>2;
  54. // byBvalue =byBvalue>>2;
  55. int iMaximo=max(byRvalue,byGvalue);
  56. iMaximo=max(iMaximo,byBvalue);
  57. iMaximo= 255-iMaximo;
  58. iMaximo=iMaximo-(int)(iMaximo*0.08);
  59. return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo);
  60. }
  61. COLORREF GuiDrawLayer::GetRGBColorBTNHigh()
  62. {
  63. return ::GetSysColor(COLOR_BTNHIGHLIGHT);
  64. }
  65. COLORREF GuiDrawLayer::GetRGBColorFace()
  66. {
  67. return ::GetSysColor(COLOR_BTNFACE);
  68. }
  69. COLORREF GuiDrawLayer::GetRGBColorShadow()
  70. {
  71. return ::GetSysColor(COLOR_BTNSHADOW);
  72. }
  73. COLORREF GuiDrawLayer::GetRGBPressBXP()
  74. {
  75. COLORREF clrPress = ::GetSysColor (COLOR_HIGHLIGHT);
  76. BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT));
  77. BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT));
  78. BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT));
  79. byRvalue =byRvalue>>2;
  80. byGvalue =byGvalue>>2;
  81. byBvalue =byBvalue>>2;
  82. int iMaximo=max(byRvalue,byGvalue);
  83. iMaximo=max(iMaximo,byBvalue);
  84. iMaximo= 255-iMaximo;
  85. iMaximo=iMaximo-(int)(iMaximo*0.21);
  86. return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo);
  87. }
  88. COLORREF GuiDrawLayer::GetRGBCaptionXP()
  89. {
  90. BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT));
  91. BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT));
  92. BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT));
  93. return RGB(byRvalue+10,byGvalue+10,byBvalue+10);
  94. }
  95. COLORREF GuiDrawLayer::GetRGBFondoXP()
  96. {
  97. BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT));
  98. BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT));
  99. BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT));
  100. byRvalue =byRvalue>>2;
  101. byGvalue =byGvalue>>2;
  102. byBvalue =byBvalue>>2;
  103. int iMaximo=max(byRvalue,byGvalue);
  104. iMaximo=max(iMaximo,byBvalue);
  105. iMaximo= 255-iMaximo;
  106. iMaximo=iMaximo-(int)(iMaximo*0.14);
  107. return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo);
  108. }
  109. BOOL GuiDrawLayer::IsGrayed()
  110. {
  111. BYTE byRvalue =GetRValue(::GetSysColor(COLOR_3DFACE));
  112. BYTE byGvalue =GetGValue(::GetSysColor(COLOR_3DFACE));
  113. BYTE byBvalue =GetBValue(::GetSysColor(COLOR_3DFACE));
  114. if ((byRvalue ==byGvalue) && (byGvalue == byBvalue) &&
  115.  (byBvalue > 190 && byBvalue < 193) || (byBvalue == 216))
  116. return TRUE;
  117. else
  118. return FALSE;
  119. }
  120. COLORREF GuiDrawLayer::GetRGBColorXP()
  121. {
  122. COLORREF clr3DFace = ::GetSysColor (COLOR_3DFACE);
  123. return RGB (((3*GetRValue (clr3DFace)+240)/4)+1,
  124. ((3*GetGValue (clr3DFace)+240)/4)+1,
  125. ((3*GetBValue (clr3DFace)+240)/4)+1);
  126. }
  127. GuiDrawLayer::~GuiDrawLayer()
  128. {
  129. }
  130. HICON GuiDrawLayer::LoadIconLib(UINT uIcon)
  131. {
  132. HINSTANCE hIrs = AfxFindResourceHandle(MAKEINTRESOURCE(uIcon),
  133. RT_GROUP_ICON);
  134. return (HICON)::LoadImage(hIrs, MAKEINTRESOURCE(uIcon), IMAGE_ICON,16, 16, 0);
  135. }
  136. void GuiDrawLayer::DrawArrow(CDC* pDC,CRect m_rc,BOOL m_bDown)
  137. {
  138. int difh =m_rc.Height()-mHeight.y;
  139. difh/=2;
  140. m_rc.left=m_rc.right-m_iWidthDrowDown;
  141. m_img.Draw(pDC,m_bDown?0:2,CPoint(m_rc.left+2,m_rc.top+difh),ILD_TRANSPARENT);
  142. }
  143. void GuiDrawLayer::DrawCheck(CDC* pDC,CRect m_rcTemp)
  144. {
  145. int iMediaAltura=(m_rcTemp.Height()/2)-2;
  146. int iMedioBox= m_rcTemp.Width()/2;
  147. CPen cp(PS_SOLID,1,GuiDrawLayer::GetRGBCaptionXP());
  148. CPen *pOld=pDC->SelectObject(&cp);
  149. pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+3);
  150. pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-2);
  151. pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-2);
  152. pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+2);
  153. pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+2);
  154. pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-3);
  155. pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-3);
  156. pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+1);
  157. pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+1);
  158. pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-4);
  159. pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-4);
  160. pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top);
  161. pDC->SelectObject(pOld);
  162. }
  163. HICON GuiDrawLayer::GetIcon(int nIcon)
  164. {
  165. return m_img.ExtractIcon(nIcon);
  166. }
  167. //function of Bruno Podetti
  168. void GuiDrawLayer::DrawShade( CRect Rect,CPoint screen,CDC* pDC)
  169. //  if(!SystemParametersInfo(SPI_GETDROPSHADOW,0,&bEnabled,0))
  170.   //  return;
  171.   // Get the size of the menu... 
  172.   
  173.   long winW = Rect.Width(); 
  174.   long winH = Rect.Height(); 
  175.   long xOrg = screen.x;  
  176.   long yOrg = screen.y;
  177.   // Get the desktop hDC... 
  178.   HDC hDcDsk = GetWindowDC(0) ;
  179.   
  180.   int X,Y;
  181.   // Simulate a shadow on right edge... 
  182.   for (X=1; X<=2 ;X++)
  183.   { 
  184.     for (Y=0; Y<2 ;Y++)
  185.     {
  186.       SetPixel(pDC->m_hDC,winW-X,Y, GetPixel(hDcDsk,xOrg+winW-X,yOrg+Y) );
  187.     }
  188.     for (Y=4; Y<8 ;Y++)
  189.     {
  190.       COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ;
  191.       SetPixel(pDC->m_hDC,winW-X,Y,DarkenColor(3 * X * (Y - 3), c)) ;
  192.     }
  193.     for (Y=8; Y<=(winH-5) ;Y++)
  194.     {
  195.       COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ;
  196.       SetPixel(pDC->m_hDC, winW - X, Y, DarkenColor(15 * X, c) );
  197.     }
  198.     for (Y=(winH-4); Y<=(winH-1) ;Y++)
  199.     {
  200.       COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ;
  201.       SetPixel( pDC->m_hDC, winW - X, Y, DarkenColor(3 * X * -(Y - winH), c)) ;
  202.     }
  203.   } 
  204.   // Simulate a shadow on the bottom edge... 
  205.   for(Y=1; Y<=2 ;Y++)
  206.   {
  207.     for(X=0; X<=2 ;X++)
  208.     {
  209.       SetPixel(pDC->m_hDC,X,winH-Y, GetPixel(hDcDsk,xOrg+X,yOrg+winH-Y)) ;
  210.     }
  211.     for(X=4; X<=7 ;X++)
  212.     {
  213.       COLORREF c = GetPixel(hDcDsk, xOrg + X, yOrg + winH - Y) ;
  214.       SetPixel(pDC->m_hDC, X, winH - Y, DarkenColor(3 * (X - 3) * Y, c)) ;
  215.     }
  216.     for(X=8; X<=(winW-5) ;X++)
  217.     {
  218.       COLORREF  c = GetPixel(hDcDsk, xOrg + X, yOrg + winH - Y); 
  219.       SetPixel(pDC->m_hDC, X, winH - Y, DarkenColor(15 * Y, c)) ;
  220.     }
  221.   }   
  222.   // Release the desktop hDC... 
  223.   ReleaseDC(0,hDcDsk);
  224. }