124 lines
2.1 KiB
C++
124 lines
2.1 KiB
C++
// RelativeMouseInput.cpp: implementation of the CRelativeMouseInput class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "RelativeMouseInput.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
// constuctor
|
|
CRelativeMouseInput::CRelativeMouseInput()
|
|
{
|
|
m_Captured=false;
|
|
}
|
|
|
|
// destructor
|
|
CRelativeMouseInput::~CRelativeMouseInput()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void CRelativeMouseInput::OnButtonDown( HWND inHwnd ) // call in OnLButtonDown/OnMButtonDown/OnRButtonDown
|
|
{
|
|
if(!m_Captured)
|
|
{
|
|
SetCapture(inHwnd);m_Captured=true;
|
|
|
|
GetCursorPos(&m_savedpos);
|
|
|
|
int midx=GetSystemMetrics(SM_CXSCREEN)/2;
|
|
int midy=GetSystemMetrics(SM_CYSCREEN)/2;
|
|
|
|
SetCursorPos(midx,midy);m_oldx=midx;m_oldy=midy;
|
|
ShowCursor(false);
|
|
}
|
|
}
|
|
|
|
|
|
void CRelativeMouseInput::OnButtonUp( void ) // call in OnLButtonUp/OnMButtonUp/OnRButtonUp
|
|
{
|
|
if(m_Captured)
|
|
{
|
|
SetCursorPos(m_savedpos.x,m_savedpos.y);
|
|
ShowCursor(true);
|
|
m_Captured=false;
|
|
|
|
ReleaseCapture();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
bool CRelativeMouseInput::OnMouseMove( HWND inHwnd, bool inbButtonDown, int &outRelx, int &outRely ) // call in OnMouseMove
|
|
{
|
|
outRelx=0;outRely=0;
|
|
|
|
if(m_Captured)
|
|
{
|
|
if(!inbButtonDown)OnButtonUp();
|
|
}
|
|
else
|
|
{
|
|
if(inbButtonDown)OnButtonDown(inHwnd);
|
|
}
|
|
|
|
if(m_Captured)
|
|
{
|
|
POINT point;
|
|
|
|
GetCursorPos(&point);
|
|
|
|
int midx=GetSystemMetrics(SM_CXSCREEN)/2;
|
|
int midy=GetSystemMetrics(SM_CYSCREEN)/2;
|
|
|
|
int relx=point.x-m_oldx;
|
|
int rely=point.y-m_oldy;
|
|
|
|
int absx=point.x-midx;
|
|
int absy=point.y-midy;
|
|
|
|
// GetDC()->SetPixel(relx+300,rely+200,0x000000);
|
|
outRelx=relx;
|
|
outRely=rely;
|
|
|
|
bool reset=false;
|
|
|
|
if(absx<-200){ reset=true;absx+=200; }
|
|
if(absx>200){ reset=true;absx-=200; }
|
|
if(absy<-200){ reset=true;absy+=200; }
|
|
if(absy>200){ reset=true;absy-=200; }
|
|
|
|
|
|
if(reset)
|
|
{
|
|
SetCursorPos(midx+absx,midy+absy);
|
|
m_oldx=midx+absx;m_oldy=midy+absy;
|
|
}
|
|
else
|
|
{
|
|
m_oldx=point.x;m_oldy=point.y;
|
|
}
|
|
|
|
if(outRelx==0 && outRely==0)return(false);
|
|
|
|
return(true);
|
|
}
|
|
else return(false);
|
|
}
|
|
|
|
|
|
|
|
bool CRelativeMouseInput::IsCaptured( void )
|
|
{
|
|
return(m_Captured);
|
|
}
|
|
|