You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
6.9 KiB
C

1 month ago
#ifndef WellXYDCEXT_H
#define WellXYDCEXT_H
#pragma once
#include "NGraphExtend.h"
extern AFX_EXT_API COLORREF HexToColorRefExt(CString strHex);
extern AFX_EXT_API void DrawFrameLineExt(CXyDC* pDC, CPoint2D pt1, CPoint2D pt2, const GDFLOGPEN& logPen);
extern AFX_EXT_API void DrawFrameRectExt(CXyDC* pDC, CRect8 rect, const GDFLOGPEN& logPen);
extern AFX_EXT_API void DrawFillPolygonExt(CXyDC* pDC, CCurveEx& curve, GDFLOGBRUSH & brush);
extern AFX_EXT_API void DrawPolyLineExt(CXyDC* pDC, CCurveEx& curve, const GDFLOGPENEXT& logPen);
extern AFX_EXT_API void DrawPolyLineExt(CXyDC *pDC,CPoint2D* pPoint, int iCount, const GDFLOGPENEXT& logPen);
extern AFX_EXT_API void DrawFillRectExt(CXyDC *pDC,CRect8 &rect, GDFLOGBRUSH &brush);
extern AFX_EXT_API void DrawLineExt(CXyDC* pDC, CPoint2D pt1, CPoint2D pt2, const GDFLOGPENEXT& logPen);
extern AFX_EXT_API void SetClipPtsForPrint(CXyDC* pDC, int n, LPPOINT& pts);
1 month ago
extern AFX_EXT_API void DrawTextExt(CXyDC* pDC, CPoint2D pt1, LPCTSTR str, GDFLOGFONTEXT& font, double dAngle, int iHorAlign, int iVerAlign);
extern AFX_EXT_API void DrawTextExt(CXyDC* pDC, CText& text);
1 month ago
//<2F><><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLINE_SOLID_BEZIER PLINE_BEZIER //B<><42><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLINE_SOLID_BCLOSE PLINE_BC //B<><42><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLINE_SOLID_SPLINE PLINE_SPLINE //S<><53><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLINE_SOLID_SCLOSE PLINE_SPLINEC //S<><53><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD>
#define PLINE_SOLID_CENTER 0x00001000 //<2F><><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
#define PLINE_SOLID_SINGLE 0x00002000 //<2F><><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
class AFX_EXT_CLASS CCurveFillSymbol : public CCurveView
{
public:
CCurveFillSymbol();
virtual ~CCurveFillSymbol();
protected:
virtual void DoFillContent(CXyDC& dc, CRect8 range);
public:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
//virtual void InitPropertiesList();
//<2F>ڵ<EFBFBD><DAB5><EFBFBD>Set<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ã<EFBFBD>Ϊ<EFBFBD>˸<EFBFBD><CBB8>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ָ<EFBFBD><D6B8>
//virtual void AfterSetPropertyValue(LPCTSTR proName);
public:
virtual void Serialize(CArchive& ar, const short &ver);
virtual int Read(CFile &fr, const short &ver);
virtual void Write(CFile &fw, const short &ver, double cc);
virtual void Draw(CXyDC &dc, CCurveEx *curve);
virtual void ScaleProperty(double sx, double sy);
virtual void WriteDML(CFile &fw, const short &ver, double cc, int nBaseTabNum);
virtual int ReadDML(CFile &fr, const short &ver, void* pXmlParse);
virtual void WritePCG(CFile &fw, const short &ver, double cc, int nBaseTabNum);
virtual int ReadPCG(CFile &fr, const short &ver, void* pXmlParse);
void operator=(CCurveFillSymbol& cr);
//int PositionNew(int bReplace);
void EnableFillCenter(BOOL bEnable);
BOOL IsFillCenter();
void EnableFillSingle(BOOL bEnable);
BOOL IsFillSingle();
CString MarkName; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CSize8 m_space; //<2F><><EFBFBD>ż<EFBFBD><C5BC>Ŀհ׼<D5B0><D7BC><EFBFBD>
CSize8 m_size; //<2F><><EFBFBD>Ŵ<EFBFBD>С
CSize8 m_scale; //<2F><><EFBFBD>ųߴ<C5B3><DFB4><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
void* pDraw; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
BOOL m_bBitmap; //ʹ<><CAB9>λͼ<CEBB><CDBC><EFBFBD><EFBFBD>
};
1 month ago
class AFX_EXT_CLASS CFONT
{
public:
CFONT(void);
virtual ~CFONT(void);
virtual void SerializeFont(CArchive& ar, const short& ver);
virtual int ReadFont(CFile& fr, const short& ver);
virtual void WriteFont(CFile& fw, const short& ver);
int ReadFontOld(CFile& fr);
virtual void WriteDMLFont(CFile& fw, const short& ver, int nBaseTabNum);
virtual void WritePCGFont(CFile& fw, const short& ver, int nBaseTabNum);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD>Ϊ-1ʱ<31><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int ReadDMLFont(CFile& fr, const short& ver, CXmlParse& xp);
virtual int ReadPCGFont(CFile& fr, const short& ver, CXmlParse& xp);
void operator=(const CFONT& font);
virtual void ScaleProperty(double sx, double sy);
void SetTitle(CString str) { m_strTitle = str; }
CString GetTitle() { return m_strTitle; }
public:
enum EScriptMode
{
modeNormal = 0,
modeSuper = 1, //<2F>ϱ<EFBFBD>
modeSub = 2 //<2F>±<EFBFBD>
};
public:
LOGFONT m_logFont; //<2F><><EFBFBD><EFBFBD>
COLORREF m_frColor; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
COLORREF m_bkColor; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
double m_dWidth; //<2F>ֿ<EFBFBD>
double m_dHeight; //<2F>ָ<EFBFBD>
double m_dTextSpace; //<2F>ּ<EFBFBD><D6BC><EFBFBD>
int m_nScript; //<2F><>ʾ<EFBFBD><CABE>ʽ<EFBFBD><CABD> 0<><30><EFBFBD>棬1<E6A3AC>ϱ꣬2<EAA3AC>±<EFBFBD>
BOOL m_bTransparent;// <20>Ƿ<EFBFBD>͸<EFBFBD><CDB8>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GDFLOGFONT<4E><54>ʹ<EFBFBD><CAB9>)
protected:
CString m_strTitle; //<2F>ڵ<EFBFBD><DAB5><EFBFBD>
};
class AFX_EXT_CLASS CTextSegment
{
public:
CTextSegment(void);
virtual ~CTextSegment(void);
CTextSegment* operator = (CTextSegment& ss);
CString DML_ToString(CFONT* pdt);
CString PCG_ToString(CFONT* pdt);
int PCG_ParseFont(CXmlParse& xp, const short& ver);
//<2F><>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
void ToSaveString(CString& str); //ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>
void ToViewString(CString& str); //ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʾ<EFBFBD>Ĵ<EFBFBD>
public:
LOGFONT* m_pLogFont;//<2F><><EFBFBD><EFBFBD>ΪNULL<4C><4C>ΪNULLʱʹ<CAB1><CAB9>CText<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8>
COLORREF color; //<2F><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɫ
CString strText; //<2F><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>ʾ<EFBFBD>ı<EFBFBD>
double scale_w; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double scale_h; //<2F>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CFONT::EScriptMode script; //<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>
};
class AFX_EXT_CLASS CDrawTextLine
{
public:
CDrawTextLine(void);
~CDrawTextLine(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ӣ<EFBFBD>ScriptΪSuperʱ<72><CAB1>ʾ<EFBFBD>ϱ꣬ΪSubʱ<62><CAB1>ʾ<EFBFBD>±<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><Font W=40 H=100 B=400 I=0 U=0 S=0 PF=0 FN=Times_New_Roman C=#000000 Script=Super><3E>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD></Font><3E>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Draw(void* pXyDC);
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><Font><3E><><EFBFBD>÷ָ<C3B7>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SplitString(CString strText);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>^u0.5 <20>ϱ<EFBFBD>^n^d0.5 <20>±<EFBFBD>^n<>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ء<EFBFBD>
int SplitStringOld(CString strText);
double GetLineRealWidth(double textWidth); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD>ı<EFBFBD>
CString DML_ToString();
int GetSegmentCount();
CTextSegment* GetSegment(int n);
protected:
class AFX_EXT_CLASS CSegmentString : public CTextSegment
{
public:
CSegmentString(void);
~CSegmentString(void);
CSegmentString* operator = (CSegmentString& ss);
int DML_ParseFont(CString& strFont);
CString DML_ToString(CDrawTextLine* pdt = NULL);
public:
int StatisticsCount(); //ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
//<2F>ڲ<EFBFBD>ͳ<EFBFBD>Ƶõ<C6B5>
CSize m_size; //<2F><><EFBFBD>ݵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ߿<C4B8><DFBF><EFBFBD>Ϊ<EFBFBD>˼ӿ<CBBC><D3BF><EFBFBD><EFBFBD><EFBFBD>
int count; //ͳ<>Ƶ<EFBFBD><C6B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>λʹ<CEBB><CAB9>
};
TObjectSet<CSegmentString> m_seg;
protected:
//<2F>¸<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
int GetNextString(const CString& strText, CString& strOutText, bool& bFontSet, int nStart);
CString GetFontString(CString& txt);
//<2F>ϸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
int GetNextString(const CString& strText, CString& strOutText, CFONT::EScriptMode& nScriptType, int nStart);
double GetFontSizeScale(CString& txt);
void TextOut(void* pXyDC, double x, double y, CString str);
bool TryToDeleteFont(CSegmentString* ps); //<2F><><EFBFBD><EFBFBD>ps<70>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_pLogFont<6E><74>ͬʱɾ<CAB1><C9BE>
public:
//<2F>ܵIJ<DCB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LOGFONT* m_pLogFont; //һ<><D2BB>ָ<EFBFBD><D6B8>CText<78><74><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
COLORREF color; //<2F><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɫ
double angle;
double y0;
double x0;
CSize m_size; //<2F><>ʾ<EFBFBD>ı<EFBFBD><C4B1>ľ<EFBFBD><C4BE>γߴ<CEB3>
UINT m_textAlign;
};
class CDrawTextExt
{
public:
CDrawTextExt() {};
public:
void DrawTextExt(CXyDC* pDC,CPoint2D pt1, LPCTSTR str, GDFLOGFONT& font, double dAngle, int iHorAlign, int iVerAlign);
void Draw(CXyDC* pDC, CText& text, COLORREF color);
protected:
//BOOL CreateSelectBrush(CXyDC* pDC, COLORREF color, int type);
void DrawRect(CXyDC* pDC, CText& text, CCurveEx* pCurveRect = NULL /*=NULL*/);
int GetTextLineCount(CText& text);
void DrawScriptText(CString str, double x0, double y0, LOGFONT* lf, COLORREF color);
};
1 month ago
#endif