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

📄 childview.h

📁 Synaptics触摸板应用开发包(SDK)
💻 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 + -