#include "StdAfx.h" #include "akMemDC.h" #include "akStaticGroup.h" BEGIN_MESSAGE_MAP(CakStaticGroup, CStatic) ON_WM_ERASEBKGND() ON_WM_PAINT() END_MESSAGE_MAP() CakStaticGroup::CakStaticGroup(void) { m_nTitlePosX = 17; m_nTitlePosY = 26; m_nDrawtype = 0; m_bImageLoad = false; m_bTransparency = false; m_TransparencyColor = RGB(255,255,254); m_rectMargin.SetRect(50,50,10,10); m_colorTitle = RGB(255,255,255); m_nTitleTextAlign = TA_LEFT|TA_BOTTOM; } CakStaticGroup::~CakStaticGroup(void) { clear(); } void CakStaticGroup::clear() { m_bImageLoad = false; m_bitImage.DeleteObject(); } void CakStaticGroup::setImage( UINT bitmapid, int drawType /*=0*/ ) { m_bitImage.DeleteObject(); m_bitImage.LoadBitmap(bitmapid); m_bitImage.GetBitmap(&m_bitImageInfo); ModifyStyle(NULL, WS_CLIPSIBLINGS | SS_OWNERDRAW , 0); SetWindowPos(&wndBottom, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); m_bImageLoad = true; GetClientRect(&m_rectClient); Invalidate(TRUE); } void CakStaticGroup::setTransparency( bool bflag, COLORREF color /*= RGB(255,255,255)*/ ) { m_bTransparency = bflag; m_TransparencyColor = color; } BOOL CakStaticGroup::OnEraseBkgnd(CDC* pDC) { return TRUE; //if(m_bImageLoad == true) return true; //return CStatic::OnEraseBkgnd(pDC); } void CakStaticGroup::SmartBitmapScale(CDC* pDC, CRect rectDC/*±×·ÁÁú°÷ÀÇ À§Ä¡*/, CBitmap* bitmap) { if(pDC == NULL) return; CDC memDC; CBitmap* pOldBitmap; memDC.CreateCompatibleDC(pDC); pOldBitmap = memDC.SelectObject(bitmap); BITMAP bitInfo; bitmap->GetBitmap(&bitInfo); int sideL,sideR, sideT, sideB; sideL=sideR=sideT=sideB=10; sideL = m_rectMargin.left; sideR = m_rectMargin.right; sideT = m_rectMargin.top; sideB = m_rectMargin.bottom; //pDC->FillSolidRect(rectDC.left, rectDC.top, rectDC.Width(), rectDC.Height(), RGB(0,0,255)); //À§1 pDC->BitBlt(rectDC.left, rectDC.top, sideL, sideT, &memDC, 0,0, SRCCOPY); //À§2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.top, rectDC.Width()-sideL-sideR, sideT, &memDC, sideL, 0, bitInfo.bmWidth-sideL-sideR, sideT, SRCCOPY); //À§3 pDC->BitBlt(rectDC.right-sideR, rectDC.top, sideR, sideT, &memDC, bitInfo.bmWidth-sideR,0, SRCCOPY); //°¡¿îµ¥ 1 pDC->TransparentBlt(rectDC.left, rectDC.top+sideT, sideL, rectDC.Height()-sideT-sideB, &memDC, 0, sideT, sideL, bitInfo.bmHeight-sideT-sideB, SRCCOPY); //°¡¿îµ¥ 2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.top+sideT, rectDC.Width()-sideL-sideR, rectDC.Height()-sideT-sideB, &memDC, sideL, sideT, bitInfo.bmWidth-sideL-sideR, bitInfo.bmHeight-sideT-sideB, SRCCOPY); //°¡¿îµ¥ 3 pDC->TransparentBlt(rectDC.left+rectDC.Width()-sideR, rectDC.top+sideT, sideR, rectDC.Height()-sideT-sideB, &memDC, bitInfo.bmWidth-sideR, sideT, sideR, bitInfo.bmHeight-sideT-sideB, SRCCOPY); //¾Æ·¡1 pDC->BitBlt(rectDC.left, rectDC.bottom-sideB, sideL, sideB, &memDC, 0,bitInfo.bmHeight-sideB, SRCCOPY); //¾Æ·¡2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.bottom-sideB, rectDC.Width()-sideL-sideR, sideB, &memDC, sideL, bitInfo.bmHeight-sideB, bitInfo.bmWidth-sideL-sideR, sideB, SRCCOPY); //¾Æ·¡3 pDC->BitBlt(rectDC.right-sideR, rectDC.bottom-sideB, sideR, sideB, &memDC, bitInfo.bmWidth-sideR,bitInfo.bmHeight-sideB, SRCCOPY); memDC.SelectObject(pOldBitmap); memDC.DeleteDC(); return; // } void CakStaticGroup::SmartBitmapScaleTransparent(CDC* pDC, CRect rectDC/*±×·ÁÁú°÷ÀÇ À§Ä¡*/, CBitmap* bitmap, COLORREF trColor) { if(pDC == NULL) return; CDC memDC; CBitmap* pOldBitmap; memDC.CreateCompatibleDC(pDC); pOldBitmap = memDC.SelectObject(bitmap); BITMAP bitInfo; bitmap->GetBitmap(&bitInfo); int sideL,sideR, sideT, sideB; sideL=sideR=sideT=sideB=10; sideL = m_rectMargin.left; sideR = m_rectMargin.right; sideT = m_rectMargin.top; sideB = m_rectMargin.bottom; //pDC->FillSolidRect(rectDC.left, rectDC.top, rectDC.Width(), rectDC.Height(), RGB(0,0,255)); //À§1 pDC->TransparentBlt(rectDC.left, rectDC.top, sideL, sideT, &memDC, 0,0,sideL,sideT, trColor); //À§2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.top, rectDC.Width()-sideL-sideR, sideT, &memDC, sideL, 0, bitInfo.bmWidth-sideL-sideR, sideT,trColor); //À§3 pDC->TransparentBlt(rectDC.right-sideR, rectDC.top, sideR, sideT, &memDC, bitInfo.bmWidth-sideR,0, sideR, sideT, trColor); //°¡¿îµ¥ 1 pDC->TransparentBlt(rectDC.left, rectDC.top+sideT, sideL, rectDC.Height()-sideT-sideB, &memDC, 0, sideT, sideL, bitInfo.bmHeight-sideT-sideB, trColor); //°¡¿îµ¥ 2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.top+sideT, rectDC.Width()-sideL-sideR, rectDC.Height()-sideT-sideB, &memDC, sideL, sideT, bitInfo.bmWidth-sideL-sideR, bitInfo.bmHeight-sideT-sideB, trColor); //°¡¿îµ¥ 3 pDC->TransparentBlt(rectDC.left+rectDC.Width()-sideR, rectDC.top+sideT, sideR, rectDC.Height()-sideT-sideB, &memDC, bitInfo.bmWidth-sideR, sideT, sideR, bitInfo.bmHeight-sideT-sideB, trColor); //¾Æ·¡1 pDC->TransparentBlt(rectDC.left, rectDC.bottom-sideB, sideL , sideB, &memDC, 0,bitInfo.bmHeight-sideB, sideL, sideB, trColor); //¾Æ·¡2 pDC->TransparentBlt(rectDC.left+sideL, rectDC.bottom-sideB, rectDC.Width()-sideL-sideR, sideB, &memDC, sideL, bitInfo.bmHeight-sideB, bitInfo.bmWidth-sideL-sideR, sideB, trColor); //¾Æ·¡3 pDC->TransparentBlt(rectDC.right-sideR, rectDC.bottom-sideB, sideR, sideB, &memDC, bitInfo.bmWidth-sideR,bitInfo.bmHeight-sideB, sideR, sideB, trColor); //memDC.DeleteDC(); } void CakStaticGroup::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { } void CakStaticGroup::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // ±×¸®±â ¸Þ½ÃÁö¿¡ ´ëÇØ¼­´Â CStatic::OnPaint()À»(¸¦) È£ÃâÇÏÁö ¸¶½Ê½Ã¿À. //return; CDC *mydc=&dc; mydc->SetBkMode(TRANSPARENT); CakMemDC memDC(mydc); memDC.SetBkMode(TRANSPARENT); memDC->SetStretchBltMode(COLORONCOLOR); CakMemDC* pMemDC = &memDC; memDC->FillSolidRect(m_rectClient, RGB(0,0,0)); if(m_bTransparency) { CDC* pParentDC = GetParent()->GetDC(); CRect rectClient; GetWindowRect(&rectClient); GetParent()->ScreenToClient(&rectClient); pMemDC->BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pParentDC, rectClient.left, rectClient.top, SRCCOPY); SmartBitmapScaleTransparent(pMemDC, m_rectClient, &m_bitImage, m_TransparencyColor); } else { SmartBitmapScale(pMemDC, m_rectClient, &m_bitImage); } CString strTitle; GetWindowText(strTitle); { CRect rect; GetClientRect(&rect); UINT oldAlign = pMemDC->SetTextAlign(TA_TOP | TA_LEFT); CFont *pOldFont; pOldFont = pMemDC->SelectObject(GetFont()); pMemDC->SetTextColor(m_colorTitle); pMemDC->SetBkMode(TRANSPARENT); pMemDC->TextOut(m_nTitlePosX, m_nTitlePosY, strTitle); pMemDC->SetTextAlign(oldAlign); pMemDC->SelectObject(pOldFont); } } BOOL CakStaticGroup::Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if(CStatic::Create(lpszText, dwStyle, rect, pParentWnd, nID)) { return true; } return false; } void CakStaticGroup::setFont( char* fontName, int fontSize ) { LOGFONT lf; CFont* pfont = GetFont(); pfont->GetLogFont(&lf); if(fontName && strlen(fontName)>0) { strcpy((char*)lf.lfFaceName, fontName); } if(fontSize) { lf.lfHeight = -fontSize; } m_fontTitle.DeleteObject(); m_fontTitle.CreateFontIndirect(&lf); SetFont(&m_fontTitle); } BOOL CakStaticGroup::PreTranslateMessage(MSG* pMsg) { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if(pMsg->message == WM_LBUTTONDOWN ||pMsg->message == WM_LBUTTONDBLCLK) { return TRUE; } return CStatic::PreTranslateMessage(pMsg); }