Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- -----------------------------------------
- * Game hacking QTS ( Quickie Tip Series )
- * no. 21 - Primitive slider drawing class
- -----------------------------------------
- * Author: SEGnosis - GHAnon.net
- * Thanks to:
- * bitterbanana - No known site
- * Drunken Cheetah - No known site
- * fatboy88 - No known site
- * Geek4Ever - No known site
- * learn_more - www.uc-forum.com
- * Novocaine - http://ilsken.net/blog/?page_id=64
- * Philly0494 - No known site
- * Roverturbo - www.uc-forum.com
- * SilentKarma - www.halocoders.com - offline
- * Strife - www.uc-forum.com
- * Wieter20 - No known site
- */
- #ifndef H_SLIDER
- #define H_SLIDER
- //----------------------------------//
- #define NEG_SLIDER ( ULONG_MAX )
- struct S_Slider
- {
- RECT rtBar,
- rtSlider,
- rtLeftButton,
- rtRightButton;
- DWORD dwMin,
- dwMax,
- dwWidth;
- bool bVisible;
- };
- //----------------------------------//
- class C_Slider
- {
- public:
- C_Slider();
- ~C_Slider();
- void AllocSliderItem(); // allocate new S_Slider structures
- void AppendSlider( int x, int y, DWORD dwWidth, DWORD dwHeight ); // fill the info for the new item
- void DrawCursor();
- void DrawSliders();
- void Input();
- __forceinline bool IsTargetValid( DWORD dwTarget )
- {
- if( dwTarget == NEG_SLIDER )
- return false;
- return true;
- }
- private:
- void GetCursor()
- {
- GetCursorPos( &m_ptCursor );
- ScreenToClient( GetFocus(), &m_ptCursor );
- }
- S_Slider* m_pSlider;
- DWORD m_dwSliderItemAmount;
- POINT m_ptCursor;
- }CSlider;
- //----------------------------------//
- C_Slider::C_Slider()
- {
- m_pSlider = 0;
- m_dwSliderItemAmount = 0;
- }
- C_Slider::~C_Slider()
- {
- }
- //----------------------------------//
- void C_Slider::AllocSliderItem()
- {
- if( m_pSlider == 0 )
- m_pSlider = new S_Slider; // if null just add one
- else
- {
- S_Slider* siTemp = new S_Slider[ m_dwSliderItemAmount + 1 ]; // allocate new memory with current size + 1 slot
- memcpy( siTemp, m_pSlider, sizeof( S_Slider ) *m_dwSliderItemAmount ); // move original data into newly allocated structure
- delete[] m_pSlider; // clear old data
- m_pSlider = siTemp; // pass new data
- ZeroMemory( &m_pSlider[ m_dwSliderItemAmount ], sizeof( S_Slider ) ); // clear new data slot
- }
- }
- void C_Slider::AppendSlider( int x, int y, DWORD dwWidth, DWORD dwHeight )
- {
- AllocSliderItem(); // allocate new item to use
- m_pSlider[ m_dwSliderItemAmount ].bVisible = true;
- SetRect( &m_pSlider[ m_dwSliderItemAmount ].rtLeftButton, x, y, 10, dwHeight );
- SetRect( &m_pSlider[ m_dwSliderItemAmount ].rtBar,
- m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.left + m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.right,
- y,
- dwWidth - m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.right,
- dwHeight );
- SetRect( &m_pSlider[ m_dwSliderItemAmount ].rtRightButton,
- m_pSlider[ m_dwSliderItemAmount ].rtBar.left + m_pSlider[ m_dwSliderItemAmount ].rtBar.right,
- y,
- 10,
- dwHeight );
- SetRect( &m_pSlider[ m_dwSliderItemAmount ].rtSlider,
- m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.left + m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.right,
- y,
- 10,
- dwHeight );
- m_pSlider[ m_dwSliderItemAmount ].dwWidth = dwWidth;
- m_pSlider[ m_dwSliderItemAmount ].dwMin = m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.left + m_pSlider[ m_dwSliderItemAmount ].rtLeftButton.right;
- m_pSlider[ m_dwSliderItemAmount ].dwMax = m_pSlider[ m_dwSliderItemAmount ].rtRightButton.left - m_pSlider[ m_dwSliderItemAmount ].rtSlider.right;
- m_dwSliderItemAmount++;
- }
- //----------------------------------//
- void C_Slider::DrawCursor()
- {
- POINT pt;
- GetCursorPos( &pt );
- ScreenToClient( g_hWnd, &pt );
- CDraw.Line( pt.x, pt.y, pt.x, pt.y + 4, 1, CDraw.m_coRed );
- CDraw.Line( pt.x, pt.y, pt.x + 4, pt.y, 1, CDraw.m_coRed );
- }
- void C_Slider::DrawSliders()
- {
- for( int i = 0; i < m_dwSliderItemAmount; i++ )
- {
- CDraw.Rect( m_pSlider[ i ].rtLeftButton.left, // solid color rectangle
- m_pSlider[ i ].rtLeftButton.top,
- m_pSlider[ i ].rtLeftButton.right,
- m_pSlider[ i ].rtLeftButton.bottom,
- CDraw.m_coOrange );
- CDraw.Rect( m_pSlider[ i ].rtBar.left,
- m_pSlider[ i ].rtBar.top,
- m_pSlider[ i ].rtBar.right,
- m_pSlider[ i ].rtBar.bottom,
- CDraw.m_coOrange );
- CDraw.Rect( m_pSlider[ i ].rtRightButton.left,
- m_pSlider[ i ].rtRightButton.top,
- m_pSlider[ i ].rtRightButton.right,
- m_pSlider[ i ].rtRightButton.bottom,
- CDraw.m_coOrange );
- CDraw.Rect( m_pSlider[ i ].rtSlider.left,
- m_pSlider[ i ].rtSlider.top,
- m_pSlider[ i ].rtSlider.right,
- m_pSlider[ i ].rtSlider.bottom,
- CDraw.m_coGreen );
- CDraw.LineRect( m_pSlider[ i ].rtLeftButton.left,// rectangle outline
- m_pSlider[ i ].rtLeftButton.top,
- m_pSlider[ i ].rtLeftButton.right,
- m_pSlider[ i ].rtLeftButton.bottom,
- CDraw.m_coBlack );
- CDraw.LineRect( m_pSlider[ i ].rtBar.left,
- m_pSlider[ i ].rtBar.top,
- m_pSlider[ i ].rtBar.right,
- m_pSlider[ i ].rtBar.bottom,
- CDraw.m_coBlack );
- CDraw.LineRect( m_pSlider[ i ].rtRightButton.left,
- m_pSlider[ i ].rtRightButton.top,
- m_pSlider[ i ].rtRightButton.right,
- m_pSlider[ i ].rtRightButton.bottom,
- CDraw.m_coBlack );
- CDraw.LineRect( m_pSlider[ i ].rtSlider.left,
- m_pSlider[ i ].rtSlider.top,
- m_pSlider[ i ].rtSlider.right,
- m_pSlider[ i ].rtSlider.bottom,
- CDraw.m_coBlack );
- // calculate percentage
- float fCurrent = ( m_pSlider[ i ].rtSlider.left - m_pSlider[ i ].rtBar.left ) + 0.000001f;//m_pSlider[ i ].rtBar.left - m_pSlider[ i ].rtSlider.right
- float fMax = ( m_pSlider[ i ].rtBar.right - m_pSlider[ i ].rtSlider.right );
- float fPercentage = ( fCurrent / fMax ) * 100.0f;
- // display percent
- CDraw.String( m_pSlider[ i ].rtRightButton.left + m_pSlider[ i ].rtRightButton.right + 5, m_pSlider[ i ].rtLeftButton.top, CDraw.m_coGreen, FF_DEFAULT, "%d,%.0f%%",
- m_pSlider[ i ].rtSlider.left - m_pSlider[ i ].rtBar.left,
- fPercentage );
- }
- }
- //----------------------------------//
- void C_Slider::Input()
- {
- static DWORD dwTargetSlider = NEG_SLIDER;
- DWORD dwLButtonState = GetAsyncKeyState( VK_LBUTTON );
- if( !dwLButtonState )
- dwTargetSlider = NEG_SLIDER;
- if( dwLButtonState && !IsTargetValid( dwTargetSlider ) )
- {
- GetCursor();
- if( dwLButtonState&1 )
- for( int i = 0; i < m_dwSliderItemAmount; i++ )
- if( m_pSlider[ i ].bVisible )
- {
- if( CDraw.IsPointInRect( m_ptCursor, m_pSlider[ i ].rtLeftButton, true ) )
- {
- m_pSlider[ i ].rtSlider.left = max( m_pSlider[ i ].dwMin, m_pSlider[ i ].rtSlider.left - 1 );
- break;
- }
- else if( CDraw.IsPointInRect( m_ptCursor, m_pSlider[ i ].rtRightButton, true ) )
- {
- m_pSlider[ i ].rtSlider.left = min( m_pSlider[ i ].dwMax, m_pSlider[ i ].rtSlider.left + 1 );
- break;
- }
- if( CDraw.IsPointInRect( m_ptCursor, m_pSlider[ i ].rtBar, true ) )
- {
- dwTargetSlider = i;
- break;
- }
- }
- }
- if( IsTargetValid( dwTargetSlider ) )
- {
- GetCursor();
- m_pSlider[ dwTargetSlider ].rtSlider.left = m_ptCursor.x - m_pSlider[ dwTargetSlider ].rtSlider.right/2;
- while( m_pSlider[ dwTargetSlider ].rtSlider.left < m_pSlider[ dwTargetSlider ].dwMin )
- m_pSlider[ dwTargetSlider ].rtSlider.left++;
- while( m_pSlider[ dwTargetSlider ].rtSlider.left > m_pSlider[ dwTargetSlider ].dwMax )
- m_pSlider[ dwTargetSlider ].rtSlider.left--;
- }
- }
- //----------------------------------//
- #endif
- How to use
- // Do not append sliders without stop
- CSlider.AppendSlider( 10, 10, 100, 10 );
- // Drawing sliders
- CSlider.DrawSliders();
- // Drawing line cursor
- CSlider.DrawCursor();
- // Control sliders
- CSlider.Input();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement