⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse.cpp

📁 墨香最新私服
💻 CPP
字号:
// Mouse.cpp: implementation of the CMouse class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Mouse.h"

extern HWND _g_hWnd;


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMouse::CMouse()
{
	m_pMouseInfo	= NULL;
	m_nWheelMsg		= 0;
	m_nQueSize		= MAX_QUESIZE;
}

CMouse::~CMouse()
{

}

//init甸绢坷扁傈俊 付快胶 捞亥飘啊 唱棵荐 乐促. 绊摹楞! confirm
void CMouse::Init()
{
//Init que	
	m_nQueSize		= MAX_QUESIZE;
	m_pMouseInfo	= new sMOUSEINFO[m_nQueSize];
	m_nHead = 0;
	m_nTail = 0;
//

//Init Mouse
	POINT pt;
	GetCursorPos( &pt );
	ScreenToClient( _g_hWnd, &pt );
	m_nMouseOldX = m_nMouseX = pt.x;
	m_nMouseOldY = m_nMouseY = pt.y;
	m_nMouseEventX = 0;
	m_nMouseEventY = 0;

	m_nWheelMsg		= 0;
	m_nCombineKey	= 0;
//
}

void CMouse::Release()
{
	SAFE_DELETE( m_pMouseInfo );
}

void CMouse::GetWindowMessage( HWND hWnd, DWORD wmsg, WPARAM wParam, LPARAM lParam )
{
	switch(wmsg)
	{
	case WM_LBUTTONDOWN:	SetCapture( _g_hWnd ); RecordMouseEvent( eME_LDOWN, wParam, lParam );	break;
	case WM_RBUTTONDOWN:	SetCapture( _g_hWnd ); RecordMouseEvent( eME_RDOWN, wParam, lParam );	break;
	case WM_MBUTTONDOWN:	SetCapture( _g_hWnd ); RecordMouseEvent( eME_MDOWN, wParam, lParam );	break;
	case WM_LBUTTONUP:		ReleaseCapture(); RecordMouseEvent( eME_LUP, wParam, lParam );	break;
	case WM_RBUTTONUP:		ReleaseCapture(); RecordMouseEvent( eME_RUP, wParam, lParam );	break;
	case WM_MBUTTONUP:		ReleaseCapture(); RecordMouseEvent( eME_MUP, wParam, lParam );	break;
	case WM_LBUTTONDBLCLK:	//RecordMouseEvent( eME_LDOWN, wParam, lParam );
							RecordMouseEvent( eME_LDBL, wParam, lParam );	break;
	case WM_RBUTTONDBLCLK:	//RecordMouseEvent( eME_RDOWN, wParam, lParam );
							RecordMouseEvent( eME_RDBL, wParam, lParam );	break;
	case WM_MBUTTONDBLCLK:	//RecordMouseEvent( eME_MDOWN, wParam, lParam );
							RecordMouseEvent( eME_MDBL, wParam, lParam );	break;
	case 0x020A/*WM_MOUSEWHEEL*/:		m_nWheelMsg = int(wParam)>>16;	break;	//for wheel
	}	
}

void CMouse::RecordMouseEvent( int nEvent, WPARAM wParam, LPARAM lParam )
{
	sMOUSEINFO MouseInfo;

	MouseInfo.nEvent	= nEvent;
	MouseInfo.nX		= LOWORD(lParam);
	MouseInfo.nY		= HIWORD(lParam);
	MouseInfo.nKey		= wParam;

	PushMouseInfo( &MouseInfo );
}



void CMouse::GetNextMouseEvent()
{
	POINT pt;
	GetCursorPos( &pt );
	ScreenToClient( _g_hWnd, &pt );
	m_nMouseX	= pt.x;
	m_nMouseY	= pt.y;

	m_nMouseAxisX	= m_nMouseOldX - m_nMouseX;
	m_nMouseAxisY	= m_nMouseOldY - m_nMouseY;

	m_nMouseOldX	= m_nMouseX;
	m_nMouseOldY	= m_nMouseY;

	m_nWheel		= m_nWheelMsg;
	m_nWheelMsg		= 0;

	for( int i = 0 ; i < eME_COUNT ; ++i )
		m_bMouseEvent[i] = FALSE;

	sMOUSEINFO MouseInfo;
	if( PopMouseInfo( &MouseInfo ) == TRUE )
	{
		ParseCurMouseEvent( &MouseInfo );
	}

	if( m_nMouseAxisX || m_nMouseAxisY )
	{
		if( LButtonPressed() )
			m_bLBtnDrag = TRUE;
		if( RButtonPressed() )	m_bRBtnDrag = TRUE;
		if( MButtonPressed() )	m_bMBtnDrag = TRUE;
	}
}

void CMouse::ParseCurMouseEvent( sMOUSEINFO* pMouseInfo )
{
	m_bMouseEvent[pMouseInfo->nEvent] = TRUE;
	
	switch( pMouseInfo->nEvent )
	{
	case eME_LDOWN:		m_bLBtnPress	= TRUE;		break;
	case eME_RDOWN:		m_bRBtnPress	= TRUE;		break;
	case eME_MDOWN:		m_bMBtnPress	= TRUE;		break;
	case eME_LUP:		m_bLBtnPress	= FALSE;	m_bLBtnDrag = FALSE;	break;
	case eME_RUP:		m_bRBtnPress	= FALSE;	m_bRBtnDrag = FALSE;	break;
	case eME_MUP:		m_bMBtnPress	= FALSE;	m_bMBtnDrag = FALSE;	break;
	case eME_LDBL:		break;
	case eME_RDBL:		break;
	case eME_MDBL:		break;
	}

	m_nMouseEventX	= pMouseInfo->nX;
	m_nMouseEventY	= pMouseInfo->nY;
	m_nCombineKey	= pMouseInfo->nKey;
}

BOOL CMouse::PushMouseInfo( sMOUSEINFO* pIn )
{
	int nTail = ( m_nTail + 1 ) % m_nQueSize;

	if( nTail == m_nHead ) return FALSE;

	m_pMouseInfo[m_nTail] = *pIn;
	m_nTail = nTail;

	return TRUE;
}

BOOL CMouse::PopMouseInfo( sMOUSEINFO* pOut )
{
	if( m_nTail == m_nHead ) return FALSE;

	*pOut = m_pMouseInfo[m_nHead];

	m_nHead = ( m_nHead + 1 ) % m_nQueSize;

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -