📄 rlplot.h
字号:
//RLPlot.h, Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005 R.Lackner//// This file is part of RLPlot.//// RLPlot is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// RLPlot is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with RLPlot; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//#define NUM_UNITS 3#define TMP_TXT_SIZE 4096#include <stdio.h>#include "Version.h"#define Swap(a,b) {a^=b;b^=a;a^=b;}inline int iround(double a) {return a < 0.0 ?(int)(a-0.499) : (int)(a+0.499);}inline int WriteFloatToBuff(char *buff, double val) {return sprintf(buff, " %g", val);}
#define _PI 3.1415926535897932384626433832795028841971693993751
#define _SQRT2 1.4142135623730950488016887242096980785696718753769
#ifdef _WINDOWS#include <windows.h>
#define w_char unsigned short#define _SBINC 1 //scrollbox extra space/line
#define _TXH 4.0 //graph text default size in mm
#else#define DWORD unsigned long
#define w_char unsigned short#define _SBINC 8 //scrollbox extra space/line
#define _TXH 3.0 //graph text default size in mm
typedef struct tagPOINT { // pt long x; long y; } POINT; typedef struct _RECT { // rc long left; long top; long right; long bottom; } RECT; #endif //_WINDOWSenum {SIZE_MINE, SIZE_SYMBOL, SIZE_SYM_LINE, SIZE_DATA_LINE, SIZE_TEXT, SIZE_GRECT_TOP, SIZE_GRECT_BOTTOM, SIZE_GRECT_LEFT, SIZE_GRECT_RIGHT, SIZE_DRECT_LEFT, SIZE_DRECT_RIGHT, SIZE_DRECT_TOP, SIZE_DRECT_BOTTOM, SIZE_DATA_LINE_PAT, SIZE_XPOS, SIZE_XPOS_LAST = SIZE_XPOS+200, SIZE_YPOS, SIZE_YPOS_LAST = SIZE_YPOS+200, SIZE_ZPOS, SIZE_ZPOS_LAST = SIZE_ZPOS+200, SIZE_BOUNDS_XMIN, SIZE_BOUNDS_XMAX, SIZE_BOUNDS_YMIN, SIZE_BOUNDS_YMAX, SIZE_BOUNDS_ZMIN, SIZE_BOUNDS_ZMAX, SIZE_BOUNDS_LEFT, SIZE_BAR_BASE, SIZE_BOUNDS_RIGHT, SIZE_BOUNDS_TOP, SIZE_BOUNDS_BOTTOM, SIZE_XAXISY, SIZE_YAXISX, SIZE_AXIS_LINE, SIZE_PATLENGTH, SIZE_BAR_DEPTH, SIZE_AXIS_TICKS, SIZE_TICK_LABELS, SIZE_ERRBAR, SIZE_ERRBAR_LINE, SIZE_BAR_LINE, SIZE_BAR, SIZE_XBASE, SIZE_YBASE, SIZE_ZBASE, SIZE_BUBBLE_LINE, SIZE_BUBBLE_HATCH_LINE, SIZE_BARMINX, SIZE_BARMINY, SIZE_ARROW_LINE, SIZE_ARROW_CAPWIDTH, SIZE_ARROW_CAPLENGTH, SIZE_HAIRLINE, SIZE_WHISKER, SIZE_WHISKER_LINE, SIZE_BOX_LINE, SIZE_BOXMINX, SIZE_BOXMINY, SIZE_BOX, SIZE_RADIUS1, SIZE_RADIUS2, SIZE_SEGLINE, SIZE_LB_XPOS, SIZE_LB_YPOS, SIZE_LB_XDIST, SIZE_LB_YDIST, SIZE_TLB_XDIST, SIZE_TLB_YDIST, SIZE_ANGLE1, SIZE_ANGLE2, SIZE_XCENTER, SIZE_YCENTER, SIZE_ZCENTER, SIZE_CELLWIDTH, SIZE_CELLTEXT, SIZE_A, SIZE_B, SIZE_MX, SIZE_MY, SIZE_MIN_Z, SIZE_MAX_Z, SIZE_MIN_X, SIZE_MAX_X, SIZE_MIN_Y, SIZE_MAX_Y, SIZE_TICK_ANGLE, SIZE_RRECT_RAD, SIZE_XCENT, SIZE_YCENT, SIZE_ZCENT, SIZE_DRADIUS, SIZE_CURSORPOS, SIZE_CURSOR_XMIN, SIZE_CURSOR_YMIN, SIZE_CURSOR_XMAX, SIZE_CURSOR_YMAX, SIZE_XSTEP, SIZE_LSPC};enum {COL_SYM_LINE, COL_SYM_FILL, COL_DATA_LINE, COL_TEXT, COL_BG, COL_AXIS, COL_BAR_LINE, COL_BAR_FILL, COL_ERROR_LINE, COL_BUBBLE_LINE, COL_BUBBLE_FILLLINE, COL_BUBBLE_FILL, COL_ARROW, COL_WHISKER, COL_BOX_LINE, COL_DRECT, COL_GRECT, COL_GRECTLINE, COL_POLYLINE, COL_POLYGON};enum {MRK_NONE, MRK_INVERT, MRK_GODRAW, MRK_SSB_DRAW};enum {CMD_NONE, CMD_ADDCHAR, CMD_SETFOCUS, CMD_KILLFOCUS, CMD_DELETE, CMD_BACKSP, CMD_CURRLEFT, CMD_CURRIGHT, CMD_CURRUP, CMD_CURRDOWN, CMD_SHIFTLEFT, CMD_SHIFTRIGHT, CMD_SHIFTUP, CMD_SHIFTDOWN, CMD_NEWGRAPH, CMD_DELGRAPH, CMD_DELOBJ, CMD_DROP_PLOT, CMD_DROP_GRAPH, CMD_OPEN, CMD_SAVEDATAAS, CMD_ADDROWCOL, CMD_MOUSE_EVENT, CMD_REDRAW, CMD_DOPLOT, CMD_LBUP, CMD_ENDDIALOG, CMD_RADIOBUTT, CMD_ADDCHILD, CMD_BAR_TYPE, CMD_BAR_FILL, CMD_SET_AXDEF, CMD_SET_DATAOBJ, CMD_SETTEXT, CMD_GETTEXT, CMD_SETTEXTDEF, CMD_GETTEXTDEF, CMD_ADDPLOT, CMD_SYM_TYPE, CMD_SYMTEXT, CMD_SYMTEXTDEF, CMD_RANGETEXT, CMD_SYM_RANGETEXT, CMD_FOCTXT, CMD_CONTINUE, CMD_ERR_TYPE, CMD_ARROW_ORG, CMD_ARROW_TYPE, CMD_FLUSH, CMD_BOX_FILL, CMD_TABDLG, CMD_NOTABDLG, CMD_TAB, CMD_SHTAB, CMD_BOX_TYPE, CMD_BUBBLE_TYPE, CMD_BUBBLE_ATTRIB, CMD_BUBBLE_FILL, CMD_BUBBLE_LINE, CMD_DL_LINE, CMD_DL_TYPE, CMD_SEG_FILL, CMD_SEG_LINE, CMD_SELECT, CMD_MOVE, CMD_CUT, CMD_SETSCROLL, CMD_SETHPOS, CMD_SETVPOS, CMD_PG_FILL, CMD_BOUNDS, CMD_SHIFT_OUT, CMD_CAN_DELETE, CMD_CAN_CLOSE, CMD_RESET_LINE, CMD_SET_TICKSTYLE, CMD_GET_GRIDLINE, CMD_SET_GRIDLINE, CMD_SET_GRIDTYPE, CMD_TLB_TXTDEF, CMD_DROP_LABEL, CMD_DROP_OBJECT, CMD_PAGEUP, CMD_PAGEDOWN, CMD_AUTOSCALE, CMD_MRK_DIRTY, CMD_SETNAME, CMD_TOOLMODE, CMD_DROPFILE, CMD_AXIS, CMD_INIT, CMD_GET_CELLDIMS, CMD_SET_CELLDIMS, CMD_TEXTSIZE, CMD_PASTE_TSV, CMD_PASTE_XML, CMD_PASTE_SSV, CMD_PASTE_CSV, CMD_COPY_TSV, CMD_COPY_XML, CMD_COPY_SYLK, CMD_QUERY_COPY, CMD_MOUSECURSOR, CMD_NEWPAGE, CMD_MINRC, CMD_MAXRC,CMD_SETCHILD, CMD_SYM_FILL, CMD_LINEUP, CMD_LINEDOWN, CMD_CONFIG, CMD_FINDTEXT, CMD_MOVE_TOP, CMD_MOVE_UP, CMD_MOVE_DOWN, CMD_MOVE_BOTTOM, CMD_UPDATE, CMD_CURRPOS, CMD_POS_FIRST, CMD_POS_LAST, CMD_ADDAXIS, CMD_REG_AXISPLOT, CMD_USEAXIS, CMD_SET_GO3D, CMD_UNDO, CMD_DELOBJ_CONT, CMD_RMU, CMD_REPL_GO, CMD_UNDO_MOVE, CMD_SAVEPOS, CMD_WHISKER_STYLE, CMD_TICK_TYPE, CMD_ZOOM, CMD_CLIP, CMD_STARTLINE, CMD_ADDTOLINE, CMD_REQ_POINT, CMD_DRAW_LATER,
CMD_SEG_MOVEABLE, CMD_ARROW_ORG3D, CMD_MUTATE, CMD_PRINT, CMD_UPDHISTORY, CMD_ALLTEXT,
CMD_SET_LINE, CMD_SAVE_SYMBOLS, CMD_SAVE_TICKS, CMD_SAVE_BARS, CMD_SAVE_BARS_CONT,
CMD_SAVE_ERRS, CMD_SAVE_ARROWS, CMD_SAVE_DROPLINES, CMD_SAVE_LABELS, CMD_UNLOCK, CMD_SYMTEXT_UNDO,
CMD_FILLRANGE, CMD_BUSY, CMD_ERROR, CMD_CLEAR_ERROR, CMD_SETPARAM, CMD_SETFUNC,
CMD_HIDE_MARK, CMD_LEGEND, CMD_FILENAME, CMD_LAYERS, CMD_OBJTREE, CMD_TEXTDEF,
CMD_HASSTACK, CMD_WRITE_GRAPHS, CMD_SETFONT, CMD_SETSTYLE, CMD_COPY, CMD_PASTE,
CMD_INSROW, CMD_INSCOL, CMD_DELROW, CMD_DELCOL, CMD_ADDTXT, CMD_ETRACC, CMD_SHPGUP, CMD_SHPGDOWN};enum {SYM_CIRCLE, SYM_CIRCLEF, SYM_RECT, SYM_RECTF, SYM_TRIAU, SYM_TRIAUF, SYM_TRIAD, SYM_TRIADF, SYM_DIAMOND, SYM_DIAMONDF, SYM_PLUS, SYM_CROSS, SYM_STAR, SYM_HLINE, SYM_VLINE, SYM_TEXT, SYM_POS_PARENT = 0x1000};//types of graphic objects: stored in Id and used for proper destruction of objects// and retrieving information.enum {GO_UNKNOWN, GO_AXIS, GO_TICK, GO_GRIDLINE, GO_SYMBOL, GO_BUBBLE, GO_BAR, GO_ERRBAR, GO_ARROW, GO_BOX, GO_LABEL, GO_MLABEL, GO_WHISKER, GO_DROPLINE, GO_DATALINE, GO_DATAPOLYGON, GO_REGLINE, GO_SDELLIPSE, GO_SEGMENT, GO_POLYLINE, GO_POLYGON, GO_RECTANGLE, GO_ELLIPSE, GO_ROUNDREC, GO_DRAGHANDLE, GO_DRAGRECT, GO_DRAG3D, GO_FRAMERECT, GO_SPHERE, GO_SVGOPTIONS, GO_PLANE, GO_BRICK, GO_LINESEG, GO_LINE3D, GO_GRIDLINE3D, GO_GRIDRADIAL, GO_SPHSCANL, GO_DROPL3D, GO_ARROW3D, GO_PLANE3D, GO_LEGITEM, GO_LEGEND,
GO_OBJTREE, GO_PLOT = 0x100, GO_PLOTSCATT, GO_REGRESSION, GO_BARCHART, GO_BUBBLEPLOT, GO_BOXPLOT, GO_DENSDISP, GO_STACKBAR, GO_STACKPG, GO_WATERFALL, GO_POLARPLOT, GO_PIECHART, GO_RINGCHART, GO_GROUP, GO_STARCHART, GO_SCATT3D, GO_PLOT3D, GO_RIBBON, GO_LIMITS, GO_FUNCTION, GO_FITFUNC, GO_FREQDIST, GO_GRID3D, GO_FUNC3D,
GO_XYSTAT, GO_GRAPH = 0x200, GO_PAGE, GO_SPREADDATA = 0x300, GO_DEFRW};enum {FILL_NONE, FILL_HLINES, FILL_VLINES, FILL_HVCROSS, FILL_DLINEU, FILL_DLINED, FILL_DCROSS, FILL_STIPPLE1, FILL_STIPPLE2, FILL_STIPPLE3, FILL_STIPPLE4, FILL_STIPPLE5, FILL_ZIGZAG, FILL_COMBS, FILL_BRICKH, FILL_BRICKV, FILL_BRICKDU, FILL_BRICKDD, FILL_TEXTURE1, FILL_TEXTURE2, FILL_WAVES1, FILL_SCALES, FILL_SHINGLES, FILL_WAVES2, FILL_HERRING, FILL_CIRCLES, FILL_GRASS, FILL_FOAM, FILL_RECS, NUM_FILLS, FILL_LIGHT3D = 0x100};enum {ERRBAR_VSYM, ERRBAR_VUP, ERRBAR_VDOWN, ERRBAR_HSYM, ERRBAR_HLEFT, ERRBAR_HRIGHT};enum {BAR_NONE, BAR_VERTB, BAR_VERTT, BAR_VERTU, BAR_HORL, BAR_HORR, BAR_HORU, BAR_RELWIDTH = 0x100, BAR_CENTERED = 0x200, BAR_WIDTHDATA = 0x400};enum {TM_STANDARD, TM_DRAW, TM_POLYLINE, TM_POLYGON, TM_RECTANGLE, TM_ELLIPSE, TM_ROUNDREC, TM_ARROW, TM_TEXT, TM_MARK, TM_ZOOMIN, TM_MOVE = 0x100};enum {MC_LAST, MC_ARROW, MC_CROSS, MC_TEXT, MC_WAIT, MC_MOVE, MC_NORTH, MC_NE, MC_EAST, MC_SE, MC_SALL, MC_ZOOM};enum {FILE_ERROR, FILE_READ, FILE_WRITE, INIT_VARS, SAVE_VARS};enum {ARROW_NOCAP, ARROW_LINE, ARROW_TRIANGLE, ARROW_UNITS = 0x100};enum {MENU_NONE, MENU_SPREAD, MENU_GRAPH, MENU_PAGE};enum {GT_UNKNOWN, GT_STANDARD, GT_CIRCCHART, GT_POLARPLOT, GT_3D};enum {ICO_NONE, ICO_INFO, ICO_ERROR, ICO_RLPLOT, ICO_QT};enum {FF_UNKNOWN, FF_CSV, FF_TSV, FF_XML, FF_SYLK, FF_RLP, FF_SVG, FF_EPS, FF_WMF, FF_RLW, FF_SSV};enum {LB_X_DATA = 0x01, LB_X_PARENT = 0x02, LB_Y_DATA = 0x10, LB_Y_PARENT = 0x20};enum {BUBBLE_CIRCLE = 0x000, BUBBLE_SQUARE = 0x001, BUBBLE_UPTRIA = 0x002, BUBBLE_DOWNTRIA = 0x003, BUBBLE_UNITS = 0x000, BUBBLE_XAXIS = 0x010, BUBBLE_YAXIS = 0x020, BUBBLE_DIAMET = 0x000, BUBBLE_CIRCUM = 0x100, BUBBLE_AREA = 0x200};enum {DH_UNKNOWN, DH_12, DH_22, DH_19, DH_29, DH_39, DH_49, DH_59, DH_69, DH_79, DH_89, DH_99, DH_18, DH_28, DH_38, DH_48, DH_58, DH_68, DH_78, DH_88, DH_DATA};enum {FE_NONE = 0x1000, FE_PARENT, FE_PLOT, FE_FLUSH, FE_DELOBJ, FE_REPLGO, FE_MUTATE};
//drop line styles#define DL_LEFT 0x001#define DL_RIGHT 0x002#define DL_YAXIS 0x004#define DL_TOP 0x010#define DL_BOTTOM 0x020#define DL_XAXIS 0x040#define DL_CIRCULAR 0x100typedef struct { int num; char* display; float convert; //multiply to get mm }tag_Units;typedef struct { int x, y, z; }POINT3D;typedef struct { double Xmin; double Ymax; double Xmax; double Ymin; }fRECT;typedef struct { double fx; double fy; double fz; }fPOINT3D;typedef struct { double fx; double fy; }lfPOINT;typedef struct { double finc, fp; }RunLinePat; //used for line patternstypedef struct { double width, patlength; DWORD color, pattern; }LineDEF;typedef struct { int type; //pattern DWORD color; double scale; LineDEF *hatch; DWORD color2; }FillDEF;typedef struct { lfPOINT org; //zoom origin double scale; //zoom factor }ZoomDEF;// Axis definitions are stored in the following structure// not to be confused with the Axis class grapic object// bits stored in flags havethe following meaning#define AXIS_NOTICKS 0x0 // no ticks at all#define AXIS_POSTICKS 0x1 // positive direction of ticks#define AXIS_NEGTICKS 0x2 // negative direction #define AXIS_SYMTICKS 0x3 // ticks are symmetrical#define AXIS_GRIDLINE 0x4 // ticks control a gridline#define AXIS_MINORTICK 0x8 // its a small tick only#define AXIS_USER 0x00 // axis placement by user#define AXIS_LEFT 0x10 // left of plot#define AXIS_RIGHT 0x20 // right -"-#define AXIS_TOP 0x30 // top -"-#define AXIS_BOTTOM 0x40 // bottom -"-#define AXIS_AUTOSCALE 0x80 // rescale upon editing#define AXIS_INVERT 0x100 // axis top->bottom, right to left#define AXIS_AUTOTICK 0x200 // select tick s automatically#define AXIS_DEFRECT 0x400 // use axis to define drawing rectangle#define AXIS_LINEAR 0x0000 // transforms ...#define AXIS_LOG 0x1000#define AXIS_RECI 0x2000#define AXIS_SQR 0x3000#define AXIS_X_DATA 0x10000 // loc.x is data coordinates#define AXIS_Y_DATA 0x20000 // loc.y is data coordinates#define AXIS_Z_DATA 0x40000 // loc.z is data coordinates#define AXIS_ANGULAR 0x100000 // angular (circular) axis#define AXIS_RADIAL 0x200000 // radial axis#define AXIS_3D 0x400000 // three dimensional axistypedef struct { void *owner; //owners are usually graph, output or axis classes DWORD flags; double min, max; fPOINT3D loc[2]; //placement of axis coordinates double Start, Step; //used for linear axis lfPOINT Center; //of polar plot double Radius; // -"- int nBreaks; //axis break ... lfPOINT *breaks; }AxisDEF;//Attributes for text properties//Text fontsenum {FONT_HELVETICA, FONT_TIMES, FONT_COURIER, FONT_GREEK};//Text styles#define TXA_VTOP 0#define TXA_VCENTER 4#define TXA_VBOTTOM 8#define TXA_HLEFT 0#define TXA_HCENTER 1#define TXA_HRIGHT 2#define TXM_OPAQUE 0#define TXM_TRANSPARENT 1#define TXS_NORMAL 0#define TXS_ITALIC 1#define TXS_BOLD 2#define TXS_UNDERLINE 4
#define TXS_SUPER 8
#define TXS_SUB 16typedef struct { DWORD ColTxt, ColBg; //colors .. double fSize; //Text size in units double RotBL, RotCHAR; //Rotation in degrees int iSize; //Text size is given in iSize as pix int Align, Mode, Style; //Text Alignement 0 1 2 // 4 5 6 // 8 9 10 //Mode 0 = opaque, 1 = transparent int Font; char *text; }TextDEF;// Store mouse events in the following structure// Action defines the type of event:enum {MOUSE_LBDOWN, MOUSE_LBUP, MOUSE_LBDOUBLECLICK, MOUSE_MBDOWN, MOUSE_MBUP, MOUSE_MBDOUBLECLICK, MOUSE_RBDOWN, MOUSE_RBUP, MOUSE_RBDOUBLECLICK, MOUSE_MOVE};typedef struct { unsigned short StateFlags; // 1 Mouse left button down // 2 middle button down // 4 right button down // 8 shift pressed // 16 control pressed unsigned short Action; int x, y; } MouseEvent;
//use this structure if type of data is not known
typedef struct {
int type;
double value;
char *text;
} anyResult;//the AccRange class allows to access data objects with a 'a1:b1' styleclass AccRange{public: AccRange(char *asc); ~AccRange(); int CountItems(); bool GetFirst(int *x, int *y); bool GetNext(int *x, int *y);
bool NextRow(int *y);
bool NextCol(int *x); bool IsInRange(int x, int y); bool BoundRec(RECT *rec);private: char *txt; int x1, y1, x2, y2, cx, cy, curridx; bool Reset(); bool Parse(int start);};class anyOutput{public: int units; //use units mm, inch ... int MrkMode; //existing mark on screen void *MrkRect; //pointer to e.g. the marked rectangle fRECT Box1; //User drawing rectangle lfPOINT Box1z; // add 3D to Box1 RECT DeskRect; //this is maximum size Rectangle double ddx, ddy, ddz; //convert to device coordinates double hres, vres; //resolution in dpi double LineWidth; //line width in units int iLine; //current width of line in pixels DWORD dLineCol; //current color of line; DWORD dBgCol; //color of background DWORD dFillCol, dFillCol2; DWORD dPattern; //current line bit-pattern TextDEF TxtSet; //store current text settings here RunLinePat RLP; //continuous setings of pattern line AxisDEF xAxis, yAxis, zAxis; //axis and transform definitions lfPOINT VPorg; //zoom origin double VPscale; //zoom factor int MenuHeight; //ofset due to pull down menus int cCursor; //mouse coursor identifier double rotM[3][3]; //rotation matrix for 3D fPOINT3D rotC; //rotation center bool hasHistMenu; //File History List int HistMenuSize; // -"- lfPOINT light_source; //angles for shading double light_vec[3][3]; // -"-
double disp_x, disp_y; //displacement on page anyOutput(); void SetRect(fRECT rec, int units, AxisDEF *x_ax, AxisDEF *y_ax); void SetSpace(fPOINT3D*,fPOINT3D*,int,double*,fPOINT3D*,AxisDEF*,AxisDEF*,AxisDEF*); void LightSource(double x, double y); DWORD VecColor(double *plane_vec, DWORD col1, DWORD col2); bool GetSize(RECT *rc); virtual bool ActualSize(RECT *rc) {return GetSize(rc);}; double fx2fix(double x); int fx2ix(double x){return (int)(0.5 + fx2fix(x));}; double fy2fiy(double y); int fy2iy(double y){return (int)(0.5 + fy2fiy(y));}; bool fp2fip(lfPOINT *fdp, lfPOINT *fip); bool fvec2ivec(fPOINT3D *v, fPOINT3D *iv); bool cvec2ivec(fPOINT3D *v, fPOINT3D *iv); bool uvec2ivec(fPOINT3D *v, fPOINT3D *iv); double un2fix(double x); int un2ix(double x) {return (int)(0.5 + un2fix(x));}; int co2ix(double x) {return un2ix(x) + iround(VPorg.fx);}; double co2fix(double x) {return un2fix(x) + VPorg.fx;}; double un2fiy(double y); int un2iy(double y) {return (int)(0.5 + un2fiy(y));}; int co2iy(double y) {return un2iy(y) + iround(VPorg.fy);}; double co2fiy(double y) {return un2fiy(y) + VPorg.fy;}; double un2fiz(double z); double fz2fiz(double z); double fix2un(double fix); double fiy2un(double fiy); virtual bool SetLine(LineDEF *lDef){return false;}; bool GetLine(LineDEF *lDef);
virtual void Focus() {return;}; virtual void Caption(char *txt){return;}; virtual void MouseCursor(int cid, bool force){return;}; virtual bool SetScroll(bool, int, int, int, int){return false;}; virtual bool SetFill(FillDEF *fill){return false;}; virtual bool SetTextSpec(TextDEF *set); virtual bool Erase(DWORD Color){return false;}; virtual bool StartPage(){return false;}; virtual bool EndPage(){return false;}; virtual bool Eject() {return false;}; //printers only virtual bool UpdateRect(RECT *rc, bool invert){return false;}; virtual bool CopyBitmap(int x, int y, anyOutput* src, int sx, int sy, int sw, int sh, bool invert){return false;}; virtual void ShowBitmap(int x, int y, anyOutput* src){return;}; bool ShowMark(void *rc, int Mode); bool HideMark(); int CalcCursorPos(char *txt, POINT p, POINT *fit); bool TextCursor(char *txt, POINT p, POINT *fit, int *pos, int disp); bool PatLine(POINT p1, POINT p2); virtual void ShowLine(POINT * pts, int cp, DWORD color) {return;}; virtual void ShowEllipse(POINT p1, POINT p2, DWORD color){return;}; virtual bool SetMenu(int type){return false;}; virtual void CheckMenu(int mid, bool check){return;}; virtual void FileHistory(){return;}; virtual bool oGetPix(int x, int y, DWORD *col){return false;}; virtual bool oDrawIcon(int type, int x, int y) {return false;}; virtual bool oGetTextExtent(char *text, int cb, int *width, int *height); virtual bool oCircle(int x1, int y1, int x2, int y2, char *nam = 0L){return false;}; virtual bool oSphere(int cx, int cy, int r, POINT *pts, int cp, char *nam = 0L); virtual bool oPolyline(POINT * pts, int cp, char *nam = 0L){return false;}; virtual bool oRectangle(int x1, int y1, int x2, int y2, char *nam = 0L){return false;}; virtual bool oSolidLine(POINT *p){return false;}; virtual bool oTextOut(int x, int y, char *txt, int cb){return false;}; virtual bool oPolygon(POINT *pts, int cp, char *nam = 0L){return false;}; virtual bool oArc(int x1, int y1, int x2, int y2, int quads){return false;};};enum {ET_UNKNOWN, ET_VALUE, ET_TEXT, ET_FORMULA, ET_ERROR, ET_BUSY=0x100,
ET_CIRCULAR=0x200};
class EditText {public: char *text, *ftext; int Align, type, row, col; void *parent; //points to a data object: defined below
anyOutput *disp; double Value;
EditText(void *par, char *msg, int r, int c); ~EditText(); bool AddChar(int c, anyOutput *Out, void *data_obj); void Update(int select, anyOutput *Out, POINT *MousePos); bool Redraw(anyOutput *Out, bool display); void Mark(anyOutput *Out, int mark); bool Command(int cmd, anyOutput *Out, void *data_obj); bool GetValue(double *v); bool GetText(char *t, int size);
bool GetResult(anyResult *r, bool use_last = false); bool SetValue(double v); bool SetText(char *t); bool GetItem(char *text, int size); void SetRec(RECT *rc); int GetX() {return loc.x;}; int GetY() {return loc.y;};
int Cursor() {return CursorPos;}; bool isValue(); bool isFormula(); bool isInRect(POINT *p) {return (p->x>loc.x && p->x<crb.x && p->y>loc.y && p->y<rb.y);}; bool hasMark() {return (m1 != m2 && m1 >= 0 && m2 >= 0);};
private: LineDEF *bgLine; FillDEF *bgFill; int length, CursorPos, m1, m2, mx1, mx2; POINT loc, rb, crb; DWORD TextCol; void FindType();};
class fmtText {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -