www.pudn.com > clking_src.rar > GuiDrawLayer.cpp
//-----------------------------------------------------------------------// // This is a part of the GuiLib MFC Extention. // // Autor : Francisco Campos // // (C) 2002 Francisco CamposAll rights reserved // // This code is provided "as is", with absolutely no warranty expressed // // or implied. Any use is at your own risk. // // You must obtain the author's consent before you can include this code // // in a software library. // // If the source code in this file is used in any application // // then acknowledgement must be made to the author of this program // // fcampos@tutopia.com // //-----------------------------------------------------------------------// #include "stdafx.h" #include "GuiDrawLayer.h" #include "resource.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// COLORREF GuiDrawLayer::DarkenColor( long lScale, COLORREF lColor) { long R = MulDiv(GetRValue(lColor),(255-lScale),255); long G = MulDiv(GetGValue(lColor),(255-lScale),255); long B = MulDiv(GetBValue(lColor),(255-lScale),255); return RGB(R, G, B); } GuiDrawLayer::GuiDrawLayer() { if (!m_img.Create(IDB_DOCKBAR,9,10,RGB(255,0,255))) { TRACE0("error"); } m_iWidthDrowDown=GetSystemMetrics(SM_CXHTHUMB); CBitmap cbmp; BITMAP bmp; cbmp.LoadBitmap(IDB_DOCKBAR); cbmp.GetBitmap(&bmp); mHeight=CPoint(bmp.bmWidth,bmp.bmHeight); } COLORREF GuiDrawLayer::GetRGBColorWhite() { return RGB(255,255,255); } COLORREF GuiDrawLayer::GetRGBColorTabs() { BYTE byRvalue =GetRValue(GetRGBColorXP()); BYTE byGvalue =GetGValue(GetRGBColorXP()); BYTE byBvalue =GetBValue(GetRGBColorXP()); // byRvalue =byRvalue>>2; // byGvalue =byGvalue>>2; // byBvalue =byBvalue>>2; int iMaximo=max(byRvalue,byGvalue); iMaximo=max(iMaximo,byBvalue); iMaximo= 255-iMaximo; iMaximo=iMaximo-(int)(iMaximo*0.08); return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo); } COLORREF GuiDrawLayer::GetRGBColorBTNHigh() { return ::GetSysColor(COLOR_BTNHIGHLIGHT); } COLORREF GuiDrawLayer::GetRGBColorFace() { return ::GetSysColor(COLOR_BTNFACE); } COLORREF GuiDrawLayer::GetRGBColorShadow() { return ::GetSysColor(COLOR_BTNSHADOW); } COLORREF GuiDrawLayer::GetRGBPressBXP() { COLORREF clrPress = ::GetSysColor (COLOR_HIGHLIGHT); BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT)); byRvalue =byRvalue>>2; byGvalue =byGvalue>>2; byBvalue =byBvalue>>2; int iMaximo=max(byRvalue,byGvalue); iMaximo=max(iMaximo,byBvalue); iMaximo= 255-iMaximo; iMaximo=iMaximo-(int)(iMaximo*0.21); return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo); } COLORREF GuiDrawLayer::GetRGBCaptionXP() { BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT)); return RGB(byRvalue+10,byGvalue+10,byBvalue+10); } COLORREF GuiDrawLayer::GetRGBFondoXP() { BYTE byRvalue =GetRValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byGvalue =GetGValue(::GetSysColor(COLOR_HIGHLIGHT)); BYTE byBvalue =GetBValue(::GetSysColor(COLOR_HIGHLIGHT)); byRvalue =byRvalue>>2; byGvalue =byGvalue>>2; byBvalue =byBvalue>>2; int iMaximo=max(byRvalue,byGvalue); iMaximo=max(iMaximo,byBvalue); iMaximo= 255-iMaximo; iMaximo=iMaximo-(int)(iMaximo*0.14); return RGB(byRvalue+iMaximo,byGvalue+iMaximo,byBvalue+iMaximo); } BOOL GuiDrawLayer::IsGrayed() { BYTE byRvalue =GetRValue(::GetSysColor(COLOR_3DFACE)); BYTE byGvalue =GetGValue(::GetSysColor(COLOR_3DFACE)); BYTE byBvalue =GetBValue(::GetSysColor(COLOR_3DFACE)); if ((byRvalue ==byGvalue) && (byGvalue == byBvalue) && (byBvalue > 190 && byBvalue < 193) || (byBvalue == 216)) return TRUE; else return FALSE; } COLORREF GuiDrawLayer::GetRGBColorXP() { COLORREF clr3DFace = ::GetSysColor (COLOR_3DFACE); return RGB (((3*GetRValue (clr3DFace)+240)/4)+1, ((3*GetGValue (clr3DFace)+240)/4)+1, ((3*GetBValue (clr3DFace)+240)/4)+1); } GuiDrawLayer::~GuiDrawLayer() { } HICON GuiDrawLayer::LoadIconLib(UINT uIcon) { HINSTANCE hIrs = AfxFindResourceHandle(MAKEINTRESOURCE(uIcon), RT_GROUP_ICON); return (HICON)::LoadImage(hIrs, MAKEINTRESOURCE(uIcon), IMAGE_ICON,16, 16, 0); } void GuiDrawLayer::DrawArrow(CDC* pDC,CRect m_rc,BOOL m_bDown) { int difh =m_rc.Height()-mHeight.y; difh/=2; m_rc.left=m_rc.right-m_iWidthDrowDown; m_img.Draw(pDC,m_bDown?0:2,CPoint(m_rc.left+2,m_rc.top+difh),ILD_TRANSPARENT); } void GuiDrawLayer::DrawCheck(CDC* pDC,CRect m_rcTemp) { int iMediaAltura=(m_rcTemp.Height()/2)-2; int iMedioBox= m_rcTemp.Width()/2; CPen cp(PS_SOLID,1,GuiDrawLayer::GetRGBCaptionXP()); CPen *pOld=pDC->SelectObject(&cp); pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+3); pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-2); pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-2); pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+2); pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+2); pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-3); pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-3); pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+1); pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+1); pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-4); pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-4); pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top); pDC->SelectObject(pOld); } HICON GuiDrawLayer::GetIcon(int nIcon) { return m_img.ExtractIcon(nIcon); } //function of Bruno Podetti void GuiDrawLayer::DrawShade( CRect Rect,CPoint screen,CDC* pDC) { // if(!SystemParametersInfo(SPI_GETDROPSHADOW,0,&bEnabled,0)) // return; // Get the size of the menu... long winW = Rect.Width(); long winH = Rect.Height(); long xOrg = screen.x; long yOrg = screen.y; // Get the desktop hDC... HDC hDcDsk = GetWindowDC(0) ; int X,Y; // Simulate a shadow on right edge... for (X=1; X<=2 ;X++) { for (Y=0; Y<2 ;Y++) { SetPixel(pDC->m_hDC,winW-X,Y, GetPixel(hDcDsk,xOrg+winW-X,yOrg+Y) ); } for (Y=4; Y<8 ;Y++) { COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ; SetPixel(pDC->m_hDC,winW-X,Y,DarkenColor(3 * X * (Y - 3), c)) ; } for (Y=8; Y<=(winH-5) ;Y++) { COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ; SetPixel(pDC->m_hDC, winW - X, Y, DarkenColor(15 * X, c) ); } for (Y=(winH-4); Y<=(winH-1) ;Y++) { COLORREF c = GetPixel(hDcDsk, xOrg + winW - X, yOrg + Y) ; SetPixel( pDC->m_hDC, winW - X, Y, DarkenColor(3 * X * -(Y - winH), c)) ; } } // Simulate a shadow on the bottom edge... for(Y=1; Y<=2 ;Y++) { for(X=0; X<=2 ;X++) { SetPixel(pDC->m_hDC,X,winH-Y, GetPixel(hDcDsk,xOrg+X,yOrg+winH-Y)) ; } for(X=4; X<=7 ;X++) { COLORREF c = GetPixel(hDcDsk, xOrg + X, yOrg + winH - Y) ; SetPixel(pDC->m_hDC, X, winH - Y, DarkenColor(3 * (X - 3) * Y, c)) ; } for(X=8; X<=(winW-5) ;X++) { COLORREF c = GetPixel(hDcDsk, xOrg + X, yOrg + winH - Y); SetPixel(pDC->m_hDC, X, winH - Y, DarkenColor(15 * Y, c)) ; } } // Release the desktop hDC... ReleaseDC(0,hDcDsk); }