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

📄 mylib.h

📁 一个modbus的编程库
💻 H
字号:
///////////////////////////////////////////////////////////////////////
//
// Mylib.h
//
// Author : Conrad Braam
// This lib is a collection of usefull classes, mostly graphical in nature
//
// Credits CStaticLink - Paul Di Lascia
//         Ado classes - Carlos Antollini
//
//
///////////////////////////////////////////////////////////////////////

#ifndef __AFXMT_H__
   // include multithreaded MFC headder for Thread class
	#include <afxmt.h>

   //#error Must include <afxmt.h> Multithreaded classes.
#endif


#ifndef __MYLIB_H__
#define __MYLIB_H__

#include "ado.h"
#include "statlink.h"
#include "colorstatic.h"

#define SUCCESS                     0

#ifdef FAILED
   #undef FAILED
#endif
#define FAILED                   -1

#define MAX_VALUE_NAME           256
#define MAX_PORT_NAME            256

// dialog-box constants
#define PORT_INUSESTR      " *"     // appended to LB for used comm ports

LONG CalcLRC(BYTE * lrcBuffPtr,    //  -> pointer to buffer at start of LRC
             DWORD  buffLen,       //  ->
             BOOL   calc2Comp,     //  -> Calculate 2's Complement also (last call)
             BYTE * lrc            // <->
            );

LONG SwopWords(DWORD * x);
LONG SwopBytes(WORD * x);
LONG SwopDWords(DWORD * x);
double Round(double val);

#define MAX_ERROR_STR_LEN     256




/////////////////////////////////////////////////////////////////////////////
// Registry access class
//

class DRegKey : public CObject
{
   public:
      // default constructor & destructor
      DRegKey()
         { Init(); };
      ~DRegKey()
         { Close(); };
   
      // alternate constructor
      DRegKey(HKEY hKey, LPCTSTR keyName = NULL, REGSAM regSam= KEY_ALL_ACCESS);

      // operations
      LONG Open(HKEY hKey, LPCTSTR keyName = NULL, REGSAM regSam= KEY_ALL_ACCESS);
      LONG Close();
      void Attach(HKEY key)
         { m_hKey = key; };
      HKEY Detach()
         { HKEY temp = m_hKey; m_hKey = NULL; return(temp);};
      operator HKEY() const;

      // the functions below return the win32 result codes: TRUE/FALSE
      // get value methods
      LONG QueryValue(LPCTSTR valueName , DWORD *dwValue);                 // DWORD values
      LONG QueryValue(LPCTSTR valueName , BYTE *bValue);                   // BYTE values
      LONG QueryValue(LPCTSTR valueName , LONG *lValue);                   // LONG values
      LONG QueryValue(LPCTSTR valueName , LPSTR szValue, DWORD *pLength);  // char buffers
      LONG QueryValue(LPCTSTR valueName , CString& szValue);               // CString
      LONG QueryBinValue(LPCTSTR valueName , BYTE* binData, DWORD *pLength);// RAW BYTE buffer
      // set value methods
      LONG SetBinValue(LPCTSTR valueName , BYTE* binData, DWORD length);
      LONG SetValue(LPCTSTR valueName , DWORD dwValue);
      LONG SetValue(LPCTSTR valueName , LPCTSTR szValue, DWORD length);
      LONG SetValue(LPCTSTR valueName , const BYTE* binData, DWORD length);
      LONG SetValue(LPCTSTR valueName , CString& stringCString) {const char *pS = stringCString;LONG ret=SetValue(valueName,(const char*)pS, stringCString.GetLength());return(ret);};
      // Reg. management functions
      LONG DeleteValue(LPCTSTR valueName);
      LONG DeleteKey(LPCTSTR keyName = NULL);
      LONG DeleteKeyRecurse(LPCTSTR keyName = NULL);

      LONG EnumKey(CStringArray &csaKeyNames);          // populate a CStringarray with key names
      LONG EnumKey(DWORD index, CString &valueName);         // return the key name at an index
      LONG EnumKey(DWORD index, LPSTR string, DWORD maxSize);// ditto
   private:
      void Init()
      {  m_hKey = NULL; m_baseKey = NULL;};

   public:
      HKEY  m_hKey;

      static HKEY local_machine;   // = HKEY_LOCAL_MACHINE;
      static HKEY current_user;    // = HKEY_CURRENT_USER;

   private:
      LONG result;
      HKEY  m_baseKey;
      CString m_KeyName;
}; // class DRegKey

////////////////////////////////////////////////////////////////////////////////
// Dialog window resizing class
// see CPP file for more

#define IDC_MAIN 0   //Parent dialog ID to be relative window

class CResizer  
{
public:
  enum EBorder{
    eFixed = 1,  //Given distance to specified window side
    eProportional, //Coordinate is changed proportionally to width/height of specified window
    eWidth,   //The width is preserved (relative window and window side are ignored)
    eHeight,  //The height is preserved (relative window and window side are ignored)
  };
  enum ESize{
    eLeft = 1,  //Relative to left side
    eTop,       //Top
    eRight,     //Right
    eBottom,    //Bottom
    eXCenter,   //The center of width
    eYCenter    //The center of height
  };
  struct CBorder{
    EBorder eType;  //Type of relation to relative control side
    int nRelID;     //Relative control
    ESize eRelType; //Side of relative control
  };
  struct CBorderInfo{
    int nID;         //Control ID
    CBorder left;    
    CBorder top;
    CBorder right;
    CBorder bottom;
  };
private:
  struct CControlInfo{
    RECT rcInitial; //initial control position;
    const CBorderInfo *pInfo;
  };
  struct CRectInfo{
    int nID;       //Control ID
    RECT rc;      //New control rect
    bool bVisible; //If control is visible
    bool bHide;    //If control should be hidden because it overlaps senior control
  };
  HWND m_wndParent;
  RECT m_rcInitial; //Initial window client area
  typedef CControlInfo * TInfo;
  typedef CRectInfo * TRectInfo;
  TInfo m_vInfo;
  int m_nSize; //Size of m_vInfo array
  mutable TRectInfo m_vRectInfo;
  mutable int m_nCachedSize; //Size of m_vRectInfo
protected:
  HWND GetDlgItem(int nID) const{return ::GetDlgItem(m_wndParent, nID);}
  void GetDlgItemRect(int nID, RECT &rc) const;
  void GetCachedDlgItemRect(int nID, RECT &rc) const;
  void GetInitialDlgItemRect(int nID, RECT &rc) const;
  void Move(int nIndex) const;
  int GetCoordinate(ESize eType, const RECT &rcInitial, const CBorder &border, const RECT &rc) const;
  static int GetRectCoord(ESize eType, const RECT &rc);
  static int GetRectSize(ESize eType, const RECT &rc);
  int GetRelativeCoord(const CBorder &border) const;
  int Find(int nID) const;
  int FindCached(int nID) const;
  void MoveAndHideOverlapped() const;
  void Clear();
public:
  //Initializes resizer
  bool Init(HWND hWndParent, LPCRECT rcInitial, const CBorderInfo *pBorders, int nSize);
  //Performs moving of controls
  void Move() const;
  //Just constructor
  CResizer();
  //Just destructor
  ~CResizer();
};

/////////////////////////////////////////////////////////////////////////////
// The CDragSizerBmp class implements a bitmap subclassed from a static.
// A mouse-down over the bitmap is used to capture the mouse and then size the 
// parent window, like a window "drag" bar, which posts WM_SIZE to the parent
// untill the mouse is released to another window gains focus.

class CDragSizerBmp : public CWnd
{
// Construction
public:
	CDragSizerBmp();

   BOOL SetBitmapID(int resourceId);

   // mouse cursor type and window corner type specified:
   enum _CursorCornerType
   {
      CORNER_BOTTOMRIGHT   = 0,  // 0=default : IDC_SIZENWSE
      CORNER_BOTTOMLEFT,         // 1=IDC_SIZENESW
      CORNER_TOPRIGHT,           // 2=IDC_SIZENESW
      CORNER_TOPLEFT             // 3=IDC_SIZENESW
   };
   
   BOOL SetCornerType(_CursorCornerType corner, int resourceId, BOOL shiftControl = TRUE);
// Attributes
public:

private:
   CBitmap m_bitMap;
   BOOL    m_buttonDown;
   CPoint  m_downPosition;
   _CursorCornerType m_cornerType;

   virtual void PreSubclassWindow();
   // Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDragSizerBmp)
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CDragSizerBmp();

	// Generated message map functions
protected:
   void DrawTrans(HDC hDC, int x, int y);
   void DrawTrans(CDC* pDC, int x, int y);
   int GetWidth();
   int GetHeight();

   int m_iWidth;
   int m_iHeight;
   HBITMAP m_hbmMask;    // handle to mask bitmap

   void GetMetrics();
   void CreateMask(HDC hDC);

   DECLARE_DYNAMIC(CDragSizerBmp)
	//{{AFX_MSG(CDragSizerBmp)
	afx_msg void OnPaint();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};


#endif __MYLIB_H__

⌨️ 快捷键说明

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