// EditSlider.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "MiniSlider.h" // CMiniSlider IMPLEMENT_DYNAMIC(CMiniSlider, CWnd) CMiniSlider::CMiniSlider() { m_fPos = 25.f; m_bLButtonDown = false; } CMiniSlider::~CMiniSlider() { } BEGIN_MESSAGE_MAP(CMiniSlider, CWnd) ON_WM_PAINT() ON_WM_MOUSEMOVE() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_CLOSE() ON_WM_DESTROY() END_MESSAGE_MAP() LRESULT CMiniSlider::OnSetPos( WPARAM wParam, LPARAM lParam ) { float *pPos = (float *)wParam; SetPos( *pPos ); return S_OK; } // CMiniSlider ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CMiniSlider::SetPos( float fValue ) { m_fPos = fValue; if( m_fPos <= 0.f ) m_fPos = 0.f; if( m_fPos >= 100.f) m_fPos = 100.f; CWnd *pWnd = GetParent(); if( pWnd ) pWnd->SendMessage( UM_MINISLIDER_UPDATE_POS, (WPARAM)&m_fPos ); Invalidate(); } void CMiniSlider::OnPaint() { CPaintDC dc(this); CRect rcRect; GetClientRect( &rcRect ); dc.Draw3dRect( &rcRect, RGB(0,0,0), RGB(255,255,255) ); rcRect.DeflateRect( 1, 1, 1, 1 ); dc.FillSolidRect( &rcRect, RGB( 255, 255, 255 ) ); rcRect.DeflateRect( 1, 1, 1, 1 ); float fLength = (float)rcRect.Width(); rcRect.right = rcRect.left + (int)( ( fLength / 100.f ) * m_fPos ); DWORD dwColor = ( IsWindowEnabled() == TRUE ) ? RGB( 80, 80, 80 ) : RGB( 180, 180, 180 ); dc.FillSolidRect( &rcRect, dwColor ); } void CMiniSlider::OnMouseMove(UINT nFlags, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. if( m_bLButtonDown == true ) { CRect rcRect; GetClientRect( &rcRect ); ClientToScreen( &rcRect ); ClipCursor( &rcRect ); GetClientRect( &rcRect ); int nPos = point.x; int nWidth = rcRect.Width() - 4; if( nPos <= 2 ) nPos = 0; if( nPos >= rcRect.Width() - 2 ) nPos = rcRect.Width() - 2; float fPos = 100.f / (float)nWidth * nPos; SetPos( fPos ); } CWnd::OnMouseMove(nFlags, point); } void CMiniSlider::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. m_bLButtonDown = true; CRect rcRect; GetClientRect( &rcRect ); ClientToScreen( &rcRect ); ClipCursor( &rcRect ); GetClientRect( &rcRect ); int nPos = point.x; int nWidth = rcRect.Width() - 4; if( nPos <= 2 ) nPos = 0; if( nPos >= rcRect.Width() - 2 ) nPos = rcRect.Width() - 2; float fPos = 100.f / (float)nWidth * nPos; SetPos( fPos ); CWnd::OnLButtonDown(nFlags, point); } void CMiniSlider::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. m_bLButtonDown = false; ClipCursor( NULL ); CWnd::OnLButtonUp(nFlags, point); }