#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);
|
}
|