153 lines
7.9 KiB
C
153 lines
7.9 KiB
C
|
/******************************************************
|
||
|
* EasyX Library for C++ (Ver:20240225)
|
||
|
* https://easyx.cn
|
||
|
*
|
||
|
* graphics.h
|
||
|
* Based on easyx.h and retaining several old APIs.
|
||
|
* The functions and constants declared in this file are only for compatibility and are not recommended.
|
||
|
******************************************************/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <easyx.h>
|
||
|
|
||
|
|
||
|
|
||
|
// Old Window Properties
|
||
|
#define SHOWCONSOLE 1 // Maintain the console window when creating a graphics window
|
||
|
#define NOCLOSE 2 // Disable the close button
|
||
|
#define NOMINIMIZE 4 // Disable the minimize button
|
||
|
#define EW_SHOWCONSOLE 1 // Maintain the console window when creating a graphics window
|
||
|
#define EW_NOCLOSE 2 // Disable the close button
|
||
|
#define EW_NOMINIMIZE 4 // Disable the minimize button
|
||
|
#define EW_DBLCLKS 8 // Support double-click events
|
||
|
|
||
|
|
||
|
|
||
|
// Old fill styles
|
||
|
#define NULL_FILL BS_NULL
|
||
|
#define EMPTY_FILL BS_NULL
|
||
|
#define SOLID_FILL BS_SOLID
|
||
|
// Old normal fill style
|
||
|
#define BDIAGONAL_FILL BS_HATCHED, HS_BDIAGONAL // Fill with ///.
|
||
|
#define CROSS_FILL BS_HATCHED, HS_CROSS // Fill with +++.
|
||
|
#define DIAGCROSS_FILL BS_HATCHED, HS_DIAGCROSS // Fill with xxx (heavy cross hatch fill).
|
||
|
#define DOT_FILL (BYTE*)"\x80\x00\x08\x00\x80\x00\x08\x00" // Fill with xxx.
|
||
|
#define FDIAGONAL_FILL BS_HATCHED, HS_FDIAGONAL // Fill with \\\.
|
||
|
#define HORIZONTAL_FILL BS_HATCHED, HS_HORIZONTAL // Fill with ===.
|
||
|
#define VERTICAL_FILL BS_HATCHED, HS_VERTICAL // Fill with |||.
|
||
|
// Old dense fill style
|
||
|
#define BDIAGONAL2_FILL (BYTE*)"\x44\x88\x11\x22\x44\x88\x11\x22"
|
||
|
#define CROSS2_FILL (BYTE*)"\xff\x11\x11\x11\xff\x11\x11\x11"
|
||
|
#define DIAGCROSS2_FILL (BYTE*)"\x55\x88\x55\x22\x55\x88\x55\x22"
|
||
|
#define DOT2_FILL (BYTE*)"\x88\x00\x22\x00\x88\x00\x22\x00"
|
||
|
#define FDIAGONAL2_FILL (BYTE*)"\x22\x11\x88\x44\x22\x11\x88\x44"
|
||
|
#define HORIZONTAL2_FILL (BYTE*)"\x00\x00\xff\x00\x00\x00\xff\x00"
|
||
|
#define VERTICAL2_FILL (BYTE*)"\x11\x11\x11\x11\x11\x11\x11\x11"
|
||
|
// Old heavy line fill style
|
||
|
#define BDIAGONAL3_FILL (BYTE*)"\xe0\xc1\x83\x07\x0e\x1c\x38\x70"
|
||
|
#define CROSS3_FILL (BYTE*)"\x30\x30\x30\x30\x30\x30\xff\xff"
|
||
|
#define DIAGCROSS3_FILL (BYTE*)"\xc7\x83\xc7\xee\x7c\x38\x7c\xee"
|
||
|
#define DOT3_FILL (BYTE*)"\xc0\xc0\x0c\x0c\xc0\xc0\x0c\x0c"
|
||
|
#define FDIAGONAL3_FILL (BYTE*)"\x07\x83\xc1\xe0\x70\x38\x1c\x0e"
|
||
|
#define HORIZONTAL3_FILL (BYTE*)"\xff\xff\x00\x00\xff\xff\x00\x00"
|
||
|
#define VERTICAL3_FILL (BYTE*)"\x33\x33\x33\x33\x33\x33\x33\x33"
|
||
|
// Old other fill style
|
||
|
#define INTERLEAVE_FILL (BYTE*)"\xcc\x33\xcc\x33\xcc\x33\xcc\x33"
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
#if _MSC_VER > 1200 && _MSC_VER < 1900
|
||
|
#define _EASYX_DEPRECATE __declspec(deprecated("This function is deprecated."))
|
||
|
#define _EASYX_DEPRECATE_WITHNEW(_NewFunc) __declspec(deprecated("This function is deprecated. Instead, use this new function: " #_NewFunc ". See https://docs.easyx.cn/" #_NewFunc " for details."))
|
||
|
#define _EASYX_DEPRECATE_OVERLOAD(_Func) __declspec(deprecated("This overload is deprecated. See https://docs.easyx.cn/" #_Func " for details."))
|
||
|
#else
|
||
|
#define _EASYX_DEPRECATE
|
||
|
#define _EASYX_DEPRECATE_WITHNEW(_NewFunc)
|
||
|
#define _EASYX_DEPRECATE_OVERLOAD(_Func)
|
||
|
#endif
|
||
|
|
||
|
// Old text related functions
|
||
|
// nHeight: The height of the text
|
||
|
// nWidth: The average width of the character. If 0, the scale is adaptive.
|
||
|
// lpszFace: The font name
|
||
|
// nEscapement: The writing angle of the string, 0.1 degrees, defaults to 0.
|
||
|
// nOrientation: The writing angle of each character, 0.1 degrees, defaults to 0.
|
||
|
// nWeight: The stroke weight of the character
|
||
|
// bItalic: Specify whether the font is italic
|
||
|
// bUnderline: Specify whether the font is underlined
|
||
|
// bStrikeOut: Specify whether the font has a strikeout
|
||
|
// fbCharSet: Specifies the character set
|
||
|
// fbOutPrecision: Specifies the output accuracy of the text
|
||
|
// fbClipPrecision: Specifies the clip accuracy of the text
|
||
|
// fbQuality: Specifies the output quality of the text
|
||
|
// fbPitchAndFamily: Specifies a font family that describes a font in a general way
|
||
|
_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace);
|
||
|
_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut);
|
||
|
_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily);
|
||
|
_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(const LOGFONT *font); // Set current text style
|
||
|
_EASYX_DEPRECATE_WITHNEW(gettextstyle) void getfont(LOGFONT *font); // Get current text style
|
||
|
|
||
|
// Old drawing related functions
|
||
|
void bar(int left, int top, int right, int bottom); // Draw a filled rectangle without a border
|
||
|
void bar3d(int left, int top, int right, int bottom, int depth, bool topflag); // Draw a filled 3D rectangle with a border
|
||
|
|
||
|
void drawpoly(int numpoints, const int *polypoints); // Draw a polygon without filling
|
||
|
void fillpoly(int numpoints, const int *polypoints); // Draw a filled polygon with a border
|
||
|
|
||
|
int getmaxx(); // Get the maximum x-coordinate in the physical coordinates of the graphics window
|
||
|
int getmaxy(); // Get the maximum y-coordinate in the physical coordinates of the graphics window
|
||
|
|
||
|
COLORREF getcolor(); // Get current foreground color
|
||
|
void setcolor(COLORREF color); // Set current foreground color
|
||
|
|
||
|
void setwritemode(int mode); // Set binary raster operation mode
|
||
|
|
||
|
// Old current location related functions
|
||
|
_EASYX_DEPRECATE int getx(); // Get current x coordinates
|
||
|
_EASYX_DEPRECATE int gety(); // Get current y coordinates
|
||
|
_EASYX_DEPRECATE void moveto(int x, int y); // Move current location
|
||
|
_EASYX_DEPRECATE void moverel(int dx, int dy); // Move current location
|
||
|
_EASYX_DEPRECATE void lineto(int x, int y); // Draw a line
|
||
|
_EASYX_DEPRECATE void linerel(int dx, int dy); // Draw a line
|
||
|
_EASYX_DEPRECATE void outtext(LPCTSTR str); // Output a string at current location
|
||
|
_EASYX_DEPRECATE void outtext(TCHAR c); // Output a char at current location
|
||
|
|
||
|
// Old mouse related functions
|
||
|
// Mouse message
|
||
|
// WM_MOUSEMOVE Mouse moves
|
||
|
// WM_MOUSEWHEEL Mouse wheel is rotated
|
||
|
// WM_LBUTTONDOWN Left mouse button is pressed
|
||
|
// WM_LBUTTONUP Left mouse button is released
|
||
|
// WM_LBUTTONDBLCLK Left mouse button is double-clicked
|
||
|
// WM_MBUTTONDOWN Middle mouse button is pressed
|
||
|
// WM_MBUTTONUP Middle mouse button is released
|
||
|
// WM_MBUTTONDBLCLK Middle mouse button is double-clicked
|
||
|
// WM_RBUTTONDOWN Right mouse button is pressed
|
||
|
// WM_RBUTTONUP Right mouse button is released
|
||
|
// WM_RBUTTONDBLCLK Right mouse button is double-clicked
|
||
|
struct MOUSEMSG
|
||
|
{
|
||
|
UINT uMsg; // Mouse message
|
||
|
bool mkCtrl :1; // Indicates whether the CTRL key is pressed
|
||
|
bool mkShift :1; // Indicates whether the SHIFT key is pressed
|
||
|
bool mkLButton :1; // Indicates whether the left mouse button is pressed
|
||
|
bool mkMButton :1; // Indicates whether the middle mouse button is pressed
|
||
|
bool mkRButton :1; // Indicates whether the right mouse button is pressed
|
||
|
short x; // The x-coordinate of the cursor
|
||
|
short y; // The y-coordinate of the cursor
|
||
|
short wheel; // The distance the wheel is rotated, expressed in multiples or divisions of 120
|
||
|
};
|
||
|
_EASYX_DEPRECATE bool MouseHit(); // Indicates whether there are mouse messages
|
||
|
_EASYX_DEPRECATE_WITHNEW(getmessage) MOUSEMSG GetMouseMsg(); // Get a mouse message. if mouse message queue is empty, wait.
|
||
|
_EASYX_DEPRECATE_WITHNEW(peekmessage) bool PeekMouseMsg(MOUSEMSG *pMsg, bool bRemoveMsg = true); // Get a mouse message and return immediately
|
||
|
_EASYX_DEPRECATE_WITHNEW(flushmessage) void FlushMouseMsgBuffer(); // Empty the mouse message buffer
|
||
|
|
||
|
typedef ExMessage EASYXMSG; // Old message structure
|
||
|
|
||
|
// Old message category
|
||
|
#define EM_MOUSE 1
|
||
|
#define EM_KEY 2
|
||
|
#define EM_CHAR 4
|
||
|
#define EM_WINDOW 8
|