• 로그인 함 해보끄나?

  • Sarangnamu.net June 17, 2003
    Home Login Profile Study Open Project Q&A Google Code
    CHorbarText
    Last Modify : 27 December, 2010(01:58)
    기존에 Horizantal bar를 생성한뒤 앞에 text를 넣는게 다소 귀차나서 -_ -? 만든 클래스
    // HorbarText.cpp : implementation file
    //
    
    // DATE		: February 22, 2007
    // CODER	: Kurome (aucd29@gmail.com)
    // VERSION	: 1.0
    //
    //
    
    // NOTE : February 22, 2007
    // ----------------------------------------------------------
    // * 간단한 거니깐 GDI 를 이용해서 만들도록 하자. (아무래도
    //   속도가.. 훗...
    // 
    
    
    #include "stdafx.h"
    #include "GDIPLUS_TEST.h"
    #include "HorbarText.h"
    
    
    // CHorbarText
    
    IMPLEMENT_DYNAMIC(CHorbarText, CStatic)
    
    CHorbarText::CHorbarText()
    : m_szWindowText(_T(""))
    , m_bIsLoad(false)
    , m_nMiddlePos(0)
    , m_nHeight(0)
    , m_szFont(L"")
    , m_bFontBold(false)
    {
    	m_crHorbar		 = RGB(157, 157, 161);
    	m_crHorbarShadow = RGB(255, 255, 255);
    	m_crFontColor	 = RGB(0, 70, 213);		// 퍼렁 ㅋ
    }
    
    CHorbarText::~CHorbarText()
    {
    	DeleteObject(m_pen);
    	DeleteObject(m_penShadow);
    	DeleteObject(m_oTextFont);
    	DeleteObject(mBitmap);
    	DeleteObject(mDC);
    }
    
    
    BEGIN_MESSAGE_MAP(CHorbarText, CStatic)
    	ON_WM_ERASEBKGND()
    	ON_WM_PAINT()
    END_MESSAGE_MAP()
    
    // CHorbarText message handlers
    
    BOOL CHorbarText::OnEraseBkgnd(CDC* pDC)
    {
    	return true;
    }
    
    void CHorbarText::GetDefaultFont(void)
    {
    	// 시스템 폰트 가져와서 적용하기
    	LOGFONT hfont;
    	GetFont()->GetLogFont(&hfont);
    
    	if (m_szFont.GetLength())
    	{
    		wcscpy_s(hfont.lfFaceName, m_szFont);
    	}
    
    	if (m_nHeight)
    	{
    		hfont.lfHeight = m_nHeight;
    	}
    
    	if (m_bFontBold)
    	{
    		hfont.lfWeight = FW_BOLD;
    	}	
    
    	m_oTextFont.CreateFontIndirect(&hfont);
    }
    
    void CHorbarText::InitObject(CDC* pDC)
    {
    	// 한번만 로드...
    	if (!m_bIsLoad)
    	{
    		int PenStyle = PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_SQUARE;
    		
    		// MDC와 비트맵에 현재 dc를 정의 및 설정
    		GetClientRect(m_rect);
    		GetDefaultFont();
    		GetWindowText(m_szWindowText);
    
    		try
    		{
    			// 메모리 DC를 생성하구
    			mDC.CreateCompatibleDC(pDC);
    			mBitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());    
    			mDC.SelectObject(&mBitmap);
    
    			// 기본적으로 배경색이 검정이 들어가더라.. 
    			// 폰트와 배경색을 지정해주자. ^^
    			mDC.FillSolidRect(m_rect, GetSysColor(COLOR_3DFACE));
    			mDC.SelectObject(GetSysColorBrush(COLOR_3DFACE));
    			mDC.SelectObject(&m_oTextFont);
    			mDC.SetTextColor(m_crFontColor);
    
    			// 펜 설정
    			m_pen.CreatePen(PenStyle, 1, m_crHorbar); 
    			m_penShadow.CreatePen(PenStyle, 1, m_crHorbarShadow);
    			m_nMiddlePos = static_cast<int>(m_rect.Height() / 2);
    		}
    		catch (CResourceException* e)
    		{
    			e->ReportError();
    			e->Delete();
    		}
    
    		// 재 로드를 방지하기 위해서 작업
    		m_bIsLoad = true;
    	}
    }
    
    void CHorbarText::SetHorbarColor(COLORREF crHorbar, COLORREF crHorbarShadow)
    {
    	m_crHorbar		 = crHorbar;
    	m_crHorbarShadow = crHorbarShadow;
    }
    
    void CHorbarText::OnPaint()
    {
    	CPaintDC dc(this); // device context for painting
    
    	InitObject(&dc);
    
    	// 메모리DC 에 선을 먼저 그리고
    	mDC.MoveTo(0, m_nMiddlePos);
    	mDC.SelectObject(&m_pen);
    	mDC.LineTo(m_rect.Width(), m_nMiddlePos);
    	mDC.SelectObject(&m_penShadow);
    	mDC.MoveTo(0, m_nMiddlePos + 1);
    	mDC.LineTo(m_rect.Width() - 1, m_nMiddlePos + 1);
    	mDC.LineTo(m_rect.Width(), m_nMiddlePos - 1);
    
    	// 글자 넣고 여백을 위해 빈칸 넣고
    	mDC.DrawText(m_szWindowText + L"  ",m_rect,DT_LEFT);
    
    	// 내용을 넣어주고 ㅎㅎ
    	dc.BitBlt(0, 0, m_rect.Width(), m_rect.Height(), &mDC, 0, 0, SRCCOPY);
    }
    
    void CHorbarText::SetFontStyle(CString szFont, int nHeight, COLORREF crColor)
    {
    	// 폰트 변경
    	m_szFont = szFont;
    
    	// 폰트 크기 변경
    	if (nHeight)
    	{
    		m_nHeight = nHeight;
    	}
    
    	// 폰트 색 변경
    	if (crColor)
    	{
    		m_crFontColor = crColor;
    	}
    }
    
    void CHorbarText::SetFontBold(void)
    {
    	m_bFontBold = true;
    }
    
    DOWNLOAD : HorbarText.rar
    Filesize : 61.6Kb

    Comment


    입력하3 1508231963



    Locations of visitors to this page