📄 mt.h
字号:
// MT.h
#ifndef __MT_H__
#define __MT_H__
#define _COMPATIBLE_VERSION_ 114 // 可兼容的最低版本
#define _THIS_VERSION_ 114 // 当前版本
#define PI 3.1415926 // 圆周率
#define ARROW_ANGLE (PI / 8) // 箭头标记的张开角度
#define ARROW_LENGTH 15 // 箭头长度
#define CROSS_LENGTH 10 // 交叉线长度
#define MAX_TEXT_LENGTH 100 // 最长的文本标记长度
#define RECORD_LENGTH sizeof(item) // 记录长度
//#define FLASH_TIMER_ID 9999 //
#define MAX_MOUSE_POINT 100 // 多边形、折线的端点数目上限
// -> ACTION
#define ACTION_NOTHING 0 // 没有操作
#define ACTION_DELETE 10 // 删除操作
#define ACTION_ARROW 20 // 箭头操作
#define ACTION_CROSS 30 // 十字叉操作
#define ACTION_TEXT 40
#define ACTION_SETSTANDARDLENGTH 50
#define ACTION_RECTAREA 60
#define ACTION_LINEDIST 70
#define ACTION_ANGLE 80
#define ACTION_CHAOSANGLE 90
#define ACTION_CHAOSAREA 100
#define ACTION_GETINFO 110
#define ACTION_CHANGABLE 1000
#define ACTION_LINEDIST2 1010
#define ACTION_ANGLE2 1020
#define ACTION_CHAOSANGLE2 1030
#define ACTION_CHAOSAREA2 1040
// <- ACTION
#define TYPE_LINKHEADER 500
#define TYPE_NOTHING 501
#define TYPE_LINE 502
#define TYPE_START 503
#define TYPE_END 504
#define TYPE_ARC 505
#define TYPE_ARROW 506
#define TYPE_CROSS 507
#define TYPE_RECT 510
#define TYPE_TEXT 520
#define TYPE_CHAOSAREA 540
#define TYPE_CHAOSANGLE 550
#define TYPE_ANGLE 560
#define TYPE_LINEDIST 570
#define TYPE_RECTAREA 580
#define TYPE_STANDARDLENGTH 590
#define TYPE_BIGPOINT 600
#define MT_CONTROL_PLAY 0
#define MT_CONTROL_PAUSE 1
#define MT_CONTROL_ON 2
#define MT_CONTROL_OFF 3
#define MT_CONTROL_REVERSE 4
#define MT_CONTROL_STOP 5
#define MT_CONTROL_END 6
#define MT_SELECT_OFF 0
#define MT_SELECT_ON 1
#define MT_SELECT_TURN 2
////////////////////////////////////////////////////////////////////////////////////////////////////
// 测量类
////////////////////////////////////////////////////////////////////////////////////////////////////
struct FLASH_ARG
{
BOOL bLocked;
HWND hWnd;
INT iDelay;
INT iControl;
VOID* pInstance;
};
class CMeta
{
public:
CMeta();
~CMeta();
static BOOL InitMeta();
FLASH_ARG m_fa;
/*----------------------------------------------------------------------------------------------------*/
protected:
struct ITEM // Item Node
{
INT type;
INT x0;
INT y0;
INT x1;
INT y1;
union
{
DOUBLE u_double[4];
INT u_int[4];
POINT u_point[4];
CHAR word[MAX_TEXT_LENGTH];
DWORD dwRecordType;
};
// LINK
ITEM *next;
ITEM *prior;
};
struct INFOHEADER
{
WORD MTTag;
INT iVersion;
RECT SourceDCRect;
RECT SourcePICRect;
RECT TargetDCRect;
RECT TargetPICRect;
BOOL SourceDCInited;
BOOL SourcePICInited;
BOOL TargetDCInited;
BOOL TargetPICInited;
COLORREF NormalColor;
COLORREF TempColor;
COLORREF FlashLightColor;
COLORREF FlashDarkColor;
FLOAT fD1;
FLOAT fD2;
CHAR sUnit[20];
INT iDelay;
CHAR info[100];
};
INFOHEADER m_InfoHeader;
/*----------------------------------------------------------------------------------------------------*/
public:
BOOL ShowMark(BOOL bShow = TRUE);
BOOL BeginRecord(DWORD dwRecordType); // 开始记录数据
BOOL Close();
BOOL EndRecord(); // 结束记录数据
INT GetCurrentAction(); // 返回当前鼠标动作
VOID GetInfo();
BOOL GetSourceDCRect(RECT &rect) const;
BOOL GetSourcePICRect(RECT &rect) const;
BOOL GetTargetDCRect(RECT &rect) const;
BOOL GetTargetPICRect(RECT &rect) const;
BOOL HasSelected() const;
VOID InsertArc(int x0, int y0, int x2, int y2, int x3, int y3);
BOOL IsActive();
BOOL IsRecording();
BOOL KillActive();
BOOL LoadFile(CHAR *argPathName = NULL);
// BOOL MouseDown(HWND hWnd, UINT nFlags, CPoint point, HWND hContainWnd);
// BOOL MouseMove(HWND hWnd, UINT nFlags, CPoint point);
// BOOL MouseUp(HWND hWnd, UINT nFlags, CPoint point, HWND hContainWnd, CWnd *pInfoWnd);
BOOL MouseDown(UINT nFlags, CPoint point);
BOOL MouseMove(UINT nFlags, CPoint point);
BOOL MouseUp(UINT nFlags, CPoint point, CWnd *pInfoWnd);
BOOL ReDraw(HDC hDC);
BOOL SaveFile(CHAR *argPathName = NULL);
BOOL SelectItem(CPoint point);
BOOL SelectNone();
BOOL SelFlash(INT iControl = MT_SELECT_ON);
BOOL SetAction(INT action, LPARAM lParm, HWND hInfoWnd/* = NULL*/);
BOOL SetActive();
BOOL SetOutputWindow(HWND hContainWnd, HWND hWnd);
VOID SetSourceDCRect(RECT &rect);
VOID SetSourcePICRect(RECT &rect);
VOID SetTargetDCRect(RECT &rect);
VOID SetTargetPICRect(RECT &rect);
BOOL SetZoom(BOOL bIsZoom = TRUE);
BOOL TurnLeft();
BOOL TurnRight();
BOOL TurnX();
BOOL TurnY();
/*----------------------------------------------------------------------------------------------------*/
protected:
BOOL m_bHideMark;
BOOL m_bActive; // 活动标志
BOOL m_bHasStandardLength; // 存在标准长度标志
BOOL m_bIsZoom; // 当前是否放缩
BOOL m_bLightOn; // 选择的记录当前是否高亮
BOOL m_bMouseDown; // 鼠标(左键)是否按下的标志
BOOL m_bRecording; // 正在记录标志
FLOAT m_fArea; // 面积
FLOAT m_fZoomX; // 横向放缩倍数
FLOAT m_fZoomY; // 纵向放缩倍数
HGDIOBJ m_hCurrentPen; // 当前使用的画笔
HDC m_hDC; // 输出设备
HGDIOBJ m_hOldPen; // 需要保存的旧画笔
HWND m_hContainWnd; // 包容窗口
HWND m_hWnd; // 输出窗口
INT m_iCurrentAction; // 当前的状态
INT m_iCurrentPoint; // 当前点索引
FLOAT m_iLength; // 长度
INT m_iXTurn; // 横向反转
INT m_iYTurn; // 纵向反转
ITEM* m_pSelItem; // 选择表头
CString m_sFilePathName; // 存盘文件路径名字
CHAR m_sText[MAX_TEXT_LENGTH]; // 标记文字
ITEM m_tItemHeader; // 记录表头
CPoint m_tMouseEnd; // 鼠标拖动当前或结束位置
CPoint m_tMouseNewStart; // 鼠标新的拖动开始位置
CPoint m_tMouseStart; // 鼠标拖动开始位置
RECT m_tSourceDCRect; // 源设备区域
RECT m_tSourcePICRect; // 源图形区域
RECT m_tTargetDCRect; // 目标设备区域
RECT m_tTargetPICRect; // 目标图形区域
ITEM m_tTempItem; // 临时使用的记录
POINT m_pt[MAX_MOUSE_POINT]; // 鼠标点列表
/*----------------------------------------------------------------------------------------------------*/
BOOL AppendNode(CMeta::ITEM *node);
FLOAT CalcArea(POINT &pa, POINT &pb, POINT &pc);
VOID CleanUp();
VOID ConvertRect(RECT &rect);
BOOL DoRecord(HDC hDC, CMeta::ITEM *node, INT fnDrawMode = R2_COPYPEN);
BOOL EraseNode(CMeta::ITEM *node);
BOOL EraseRecord(CMeta::ITEM *node);
BOOL EraseSel(); // 删除选择内容
BOOL FindNode(CMeta::ITEM *node);
CMeta::ITEM* FindRecord(DWORD dwRecordType, CMeta::ITEM* pStart = NULL);
FLOAT GetAngle(POINT &pa, POINT &pb, POINT &pc);
BOOL GetArrow(CPoint &start, CPoint &end, CPoint &pa, CPoint &pb);
BOOL LogString(CHAR *str) const;
BOOL MoveSelToLast(); // 把选择的节点移到最后
VOID SetNewHeader();
BOOL SetStandLength(POINT &pa, POINT &pb, FLOAT fLen, CHAR *sUnit);
};
#endif // __MT_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -