📄 childview.h
字号:
// ChildView.h : interface of the CChildView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_CHILDVIEW_H__CB99E81E_36C7_44F3_AF8E_E92396BAD0D6__INCLUDED_)
#define AFX_CHILDVIEW_H__CB99E81E_36C7_44F3_AF8E_E92396BAD0D6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "SynKit.h"
class PacketData
{
public:
PacketData()
{
memset(this, 0, sizeof(*this));
}
PacketData(SynPacket *pPacket)
{
dwSequenceNumber = pPacket->SequenceNumber();
dwTimestamp = pPacket->TimeStamp();
lW = pPacket->W();
lX = pPacket->X();
lY = pPacket->Y();
lZ = pPacket->Z();
lXDelta = pPacket->XDelta();
lYDelta = pPacket->YDelta();
lZDelta = pPacket->ZDelta();
lXMickeys = pPacket->XMickeys();
lYMickeys = pPacket->YMickeys();
lXRaw = pPacket->XRaw();
lYRaw = pPacket->YRaw();
lZRaw = pPacket->ZRaw();
lZYRaw = pPacket->ZYRaw();
dwFingerState = pPacket->FingerState();
dwExtendedState = pPacket->ExtendedState();
}
DWORD dwSequenceNumber;
DWORD dwTimestamp;
LONG lW;
LONG lX;
LONG lY;
LONG lZ;
LONG lXDelta;
LONG lYDelta;
LONG lZDelta;
LONG lXMickeys;
LONG lYMickeys;
LONG lXRaw;
LONG lYRaw;
LONG lZRaw;
LONG lZYRaw;
DWORD dwState;
DWORD dwFingerState;
DWORD dwExtendedState;
};
class PacketBuffer
{
public:
enum numbers { eSize = 128 };
PacketBuffer(void)
{
m_uiCurrent = 0;
m_iUnread = 0;
}
int NextLocation(void)
{
m_iUnread += m_iUnread == eSize ? 0 : 1;
return m_uiCurrent++ % eSize;
}
void Add(PacketData &Packet)
{
m_Packets[NextLocation()] = Packet;
}
PacketData *Read(void)
{
if (m_iUnread)
return m_Packets + ((m_uiCurrent - m_iUnread--) % eSize);
else
return 0;
}
int Unread(void) { return m_iUnread; }
PacketData m_Packets[eSize];
int m_iUnread;
unsigned int m_uiCurrent;
};
class GraphContext
{
public:
RECT m_Rect;
POINT m_Last;
int m_Top;
int m_Bottom;
int m_divisions;
GraphContext(void)
{
m_Last.x = m_Last.y = 0xffff;
m_Rect.left = m_Rect.top = 0;
m_Rect.right = m_Rect.bottom = 1;
m_Top = 0;
m_Bottom = 1;
m_divisions = 7;
}
void SetRect(RECT &Rect)
{
m_Rect = Rect;
}
void SetParams(int Top = 0, int Bottom = 8192)
{
m_Top = Top;
m_Bottom = Bottom;
}
};
/////////////////////////////////////////////////////////////////////////////
// CChildView window
class CChildView : public CWnd, _ISynDeviceEvents
{
// Construction
public:
CChildView();
virtual ~CChildView();
// Attributes
public:
enum eGraphSource { eRaw, eAbsolute, eRelative, eMickeys};
SynDevice m_Device;
SynAPI m_API;
SynPacket m_Packet;
PacketBuffer m_Undrawn;
GraphContext Contexts[4];
enum eGraphSource m_eGraphSource;
int m_iNewBackgroundNeeded;
int m_iSequence;
CString m_LogName;
FILE *m_LogFile;
// Operations
public:
void PaintBackGround(CDC *cdc, GraphContext *Context);
void PaintUnifiedBackGround(CDC *cdc, GraphContext *Context);
void PaintGraph(CDC *cdc, GraphContext *Context, HPEN hpen,
unsigned int position, int value);
void InvalidateGraphArea(BOOL bInvalidateBackground = FALSE)
{
RECT Rect;
GetClientRect(&Rect);
InvalidateRect(&Rect, FALSE);
m_iNewBackgroundNeeded = bInvalidateBackground;
}
void RefreshGraph(void)
{
InvalidateGraphArea(TRUE);
}
void SelectDevice(DWORD hDevice);
int GetX(PacketData *pPacket)
{
switch (m_eGraphSource)
{
case eRaw:
return pPacket->lXRaw;
case eAbsolute:
return pPacket->lX;
case eRelative:
return pPacket->lXDelta;
case eMickeys:
return pPacket->lXMickeys;
default:
return 0;
}
}
int GetY(PacketData *pPacket)
{
switch (m_eGraphSource)
{
case eRaw:
return pPacket->lYRaw;
case eAbsolute:
return pPacket->lY;
case eRelative:
return pPacket->lYDelta;
case eMickeys:
return pPacket->lYMickeys;
default:
return 0;
}
}
int GetZ(PacketData *pPacket)
{
switch (m_eGraphSource)
{
case eRaw:
return pPacket->lZRaw;
case eAbsolute:
return pPacket->lZ;
case eRelative:
return pPacket->lZDelta;
default:
return 0;
}
}
void NewDevice(long lHandle)
{
SelectDevice(lHandle);
RefreshGraph();
}
int GetDeviceHandle(void)
{
return m_Device.GetLongProperty(SP_Handle);
}
void UpdateLogFile(CString &Filename, int iState)
{
if (m_LogFile)
fclose(m_LogFile);
m_LogFile = 0;
m_LogName = Filename;
if (!m_LogName.IsEmpty() && iState)
m_LogFile = fopen(m_LogName, "a+");
}
int LogState() { return !!m_LogFile; }
FILE *OpenLogFile(CString &Filename);
// Overrides
long STDMETHODCALLTYPE OnSynDevicePacket(long lSeq);
protected:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CChildView)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Generated message map functions
protected:
//{{AFX_MSG(CChildView)
afx_msg void OnPaint();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CHILDVIEW_H__CB99E81E_36C7_44F3_AF8E_E92396BAD0D6__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -