DragonNest/Common/MFCUtility/MiniSlider.cpp

127 lines
2.6 KiB
C++
Raw Permalink Normal View History

// EditSlider.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
//
#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 <20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
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: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
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: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
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: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
m_bLButtonDown = false;
ClipCursor( NULL );
CWnd::OnLButtonUp(nFlags, point);
}