#include "StdAfx.h" #include "mouseagent.h" cMouseAgent::cMouseAgent() : mpMouseInfo(NULL), mhWnd(NULL) { mWheelMsg = 0; mQueSize = MAX_QUESIZE; mHead = 0; mTail = 0; for( int i=0; i>16; break; default: return false; } return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : RecordMouseEvent( int event, WPARAM wParam, LPARAM lParam ) * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cMouseAgent::RecordMouseEvent( int event, WPARAM wParam, LPARAM lParam ) { sMOUSEINFO mouseInfo; mouseInfo.Event = event; mouseInfo.X = LOWORD(lParam); mouseInfo.Y = HIWORD(lParam); mouseInfo.Key = wParam; PushMouseInfo( &mouseInfo ); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : GetNextMouseEvent() * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cMouseAgent::GetNextMouseEvent() { POINT pt; GetCursorPos( &pt ); ScreenToClient( mhWnd, &pt ); mX = pt.x; mY = pt.y; mAxisX = mOldX - mX; mAxisY = mOldY - mY; mOldX = mX; mOldY = mY; mWheel = mWheelMsg; mWheelMsg = 0; for( int i = 0; iEvent] = true; switch( pMouseInfo->Event ) { case eME_LDOWN: mIsLBtnPress = true; break; case eME_RDOWN: mIsRBtnPress = true; break; case eME_MDOWN: mIsMBtnPress = true; break; case eME_LUP: mIsLBtnPress = false; mIsLBtnDrag = false; break; case eME_RUP: mIsRBtnPress = false; mIsRBtnDrag = false; break; case eME_MUP: mIsMBtnPress = false; mIsMBtnDrag = false; break; case eME_LDBL: break; case eME_RDBL: break; case eME_MDBL: break; } mMouseEventX = pMouseInfo->X; mMouseEventY = pMouseInfo->Y; mCombineKey = pMouseInfo->Key; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : PushMouseInfo( sMOUSEINFO* pIn ) * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ bool cMouseAgent::PushMouseInfo( sMOUSEINFO* pIn ) { int tail = ( mTail + 1 ) % mQueSize; if( tail == mHead ) { return false; } mpMouseInfo[mTail] = *pIn; mTail = tail; return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : PopMouseInfo( sMOUSEINFO* pOut ) * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ bool cMouseAgent::PopMouseInfo( sMOUSEINFO* pOut ) { if( mTail == mHead ) { return false; } *pOut = mpMouseInfo[mHead]; mHead = ( mHead + 1 ) % mQueSize; return true; } void cMouseAgent::ClearAllInfo() { mTail = mHead; ZeroMemory( mIsMouseEvent, sizeof( mIsMouseEvent ) ); }