EasyX图形化学习(一)

(1)EX_SHOWCONSOLE --- 在创建图形化窗口的同时保留控制台窗口。(2)EX_NOCLOSE --- 禁用图形化窗口的关闭按钮。(3)EX_NOMINIMIZE --- 禁用图形化窗口的最小化按钮。(4)EX_DBLCLKS --- 检查鼠标是否双击。注:若想同时使用上面的宏,可用按位或“ | ”连接。
摘要由CSDN通过智能技术生成

1.EasyX是什么?

是基于Windows的图形编程,给用户提供函数接口,最终函数调用会由Windows的API实现。

注:EasyX只适配 c++ 

2.头文件:

<easyx.h>---只包含最新的函数

<graphics.h>---包含<easyx.h>以及已经不推荐使用的函数

(正常只需要包含<easyx.h>即可)

3.窗口创建:

initgraph 函数:用于创建图形化窗口。

1.可以上传两个参数作为窗口的宽度和高度。

initgraph(640,480);//即创建宽度为640,高度为480的窗口

2.也可以在宽高后再传一个参数,是easyx已经定义好的宏。

(1)EX_SHOWCONSOLE --- 在创建图形化窗口的同时保留控制台窗口。

(2)EX_NOCLOSE --- 禁用图形化窗口的关闭按钮。

(3)EX_NOMINIMIZE --- 禁用图形化窗口的最小化按钮。

(4)EX_DBLCLKS --- 检查鼠标是否双击。

initgraph(640,480,EX_DBLCLKS);

注:若想同时使用上面的宏,可用按位或“ | ”连接。

initgraph(640, 480, EX_DBLCLKS | EX_SHOWCONSOLE | EX_NOCLOSE);

4.设置窗口背景颜色:

setbkcolor 函数:用于设置当前设备绘图背景色。

1.直接使用给好的颜色:

setbkcolor(WHITE);

2.任意颜色:

(1)首先打开电脑的绘图工具,找到想要的颜色,会有红绿蓝的值;

(2)然后以RGB作为参数即可。

setbkcolor(RGB(73,130,199));

注:

在设置背景色之后,并不会改变现有背景色,而是只改变背景色的值,之后再执行绘图语句,例如 outtextxy,会使用新设置的背景色值。

如果需要修改全部背景色,可以在设置背景色后执行 cleardevice( ) 函数(清除屏幕内容)。

5.窗口的坐标体系:

以左上角为原点,从左往右为x轴正方向,从上往下为y轴正方向。

6.基本图形绘制:

1.绘制一个点:

putpixel( ) 函数 :更改坐标点的颜色。

putpixel ( x,y,颜色)

putpixel(50, 50, RED);

2.绘制一条线:

(1)绘制线条:

line 函数 :绘制线条。

line (x1,y1,x2,y2) --- 绘制从x1,y1到x2,y2间的一条线。

line(0, 0, 640, 480);

注:自动填充为白色。

(2)设置线条颜色和样式:

setlinecolor ( color ) ;

serlinestyle (样式,线条粗细) ; 

注:其中线条样式分为三种:直线样式、端点样式、连接样式:

例:

setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 5);

3.绘制一个矩形:

(1)绘制无填充矩形:

rectangle (左,上,右,下)(表示对应边框所对应的坐标)

注:边框颜色为之前设置的 line 颜色。

(2)绘制填充矩形:

fillrectangle (左,上,右,下)

注:默认填充白色,若想更改填充颜色,需在绘制前setfillcolor(YELLOW);函数设置颜色。

(3)绘制无边框填充矩形:

solidrectangle (左,上,右,下)

(4)绘制圆角矩形:

roundrect (左,上,右,下,椭圆宽度,椭圆高度)

这里椭圆宽度和高度是指---圆角对应的椭圆。

同理:填充圆角矩形和无边框圆角矩形:

    fillroundrect(50, 90, 90, 130, 20, 20);
    solidroundrect(90, 130, 130, 170, 20, 20);

4.绘制一个圆形:

(1)绘制无边框圆形:cicle (x,y,半径)

(2)绘制填充圆形: fillcicle (x,y,半径)

(3)绘制无边框填充圆形: solidcicle (x,y,半径)

(4)绘制椭圆:    

ellipse ( 左,上,右,下)这里指用对应矩形坐标画出椭圆。

同理:填充椭圆和无边框椭圆:

fillellipse(150, 350, 350, 450);
solidellipse(350, 250, 550, 350);

5.绘制折线:

首先设置点列:

POINT points[] = { {0,0},{200,20},{150,80},{180,60} };

然后用polyline函数:

polyline (POINT*, 点的个数)在相应点直接产生折线。

polyline(points, 4);

7.文字绘制:

1.绘制文字:

outtextxy( x , y , 字符或字符串)--- 在指定坐标处绘制文字。

注:这里vs2022可能报错,是因为easyx的字符集问题,所有easyx的字符串,都需

1.在字符串前加一大写的 L
2.用 _T()把字符串包裹起来(推荐) 。
3.菜单栏-项目-属性-高级-字符集-把UNICODE改为多字节字符集。(推荐)

outtextxy(10, 10, _T("hello easyx."));

2.设置文字大小:

settextstyle (文字高度,文字宽度,字体名称)

注:文字宽度---设置为0,则为自适应。

       字体名称---同理需在名称前加大写 L 等。

settextstyle(50, 0, L"微软雅黑");

3.设置文字颜色:

settextcolor ( 颜色 );

settextcolor(BROWN);

4.设置背景模式:

setbkmode函数---用于设置当前设备图案填充和文字输出时的背景模式。

void setbkmode(int mode);

其中,mode可以为两个值:

OPAQUE:背景用当前背景色填充(默认)。
TRANSPARENT:背景是透明的。(即不会把后面的图形覆盖住)

例:

setbkmode(TRANSPARENT);

5.输出其他类型文字(如 int):

可通过 sprintf 将其他类型放到 char 类型的数组里。

例:

	int score = 66;
	char str[50] = { 0 };
	sprintf(str, "%d", score);
	outtextxy(getheight() - 20, getwidth() - 20, str);

8.文本居中显示:

textwidth , textheight函数:求打印字符串的宽度和高度。

例:

void centerText()
{
	int rx = 30;
	int ry = 300;
	int rw = 200;
	int rh = 60;
	//一个矩形
	setfillcolor(RGB(116, 88, 97));
	fillrectangle(rx, ry, rx+rw, ry+rh);
	//绘制文字
	settextcolor(WHITE);
	outtextxy(rx+(rw-textwidth("hello easyx"))/2, ry + (rh - textheight("hello easyx"))/2, "hello easyx");
}

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/****************************************************** * EasyX Library for C++ (Ver:20151015(beta)) * http://www.easyx.cn * * graphics.h * 基于 EasyX.h,实现在 VC 下实现简单绘图。 * 同时,为了兼容 Turbo C/C++ 和 Borland C/C++ 等一系 * 列开发环境中的 BGI 绘图库函数,做了相应扩展。 ******************************************************/ #pragma once #include <easyx.h> // 兼容 initgraph 绘图模式的宏定义(无实际意义) #define DETECT 0 #define VGA 0 #define VGALO 0 #define VGAMED 0 #define VGAHI 0 #define CGA 0 #define CGAC0 0 #define CGAC1 0 #define CGAC2 0 #define CGAC3 0 #define CGAHI 0 #define EGA 0 #define EGALO 0 #define EGAHI 0 // BGI 格式的初始化图形设备,默认 640 x 480 HWND initgraph(int* gdriver, int* gmode, char* path); void bar(int left, int top, int right, int bottom); // 画无边框填充矩形 void bar3d(int left, int top, int right, int bottom, int depth, bool topflag); // 画有边框三维填充矩形 void drawpoly(int numpoints, const int *polypoints); // 画多边形 void fillpoly(int numpoints, const int *polypoints); // 画填充的多边形 int getmaxx(); // 获取最大的宽度值 int getmaxy(); // 获取最大的高度值 COLORREF getcolor(); // 获取当前绘图前景色 void setcolor(COLORREF color); // 设置当前绘图前景色 void setwritemode(int mode); // 设置前景的二元光栅操作模式 /////////////////////////////////////////////////////////////////////////////////// // 以下函数仅为兼容早期 EasyX 的接口,不建议使用。请使用相关新函数替换。 // #if _MSC_VER > 1200 #define _EASYX_DEPRECATE(_NewFunc) __declspec(deprecated("This function is deprecated. Instead, use this new function: " #_NewFunc ". See http://www.easyx.cn/help?" #_NewFunc " for details.")) #define _EASYX_DEPRECATE_OVERLOAD(_Func) __declspec(deprecated("This overload is deprecated. See http://www.easyx.cn/help?" #_Func " for details.")) #else #define _EASYX_DEPRECATE(_NewFunc) #define _EASYX_DEPRECATE_OVERLOAD(_Func) #endif // 设置当前字体样式(该函数已不再使用,请使用 settextstyle 代替) // nHeight: 字符的平均高度; // nWidth: 字符的平均宽度(0 表示自适应); // lpszFace: 字体名称; // nEscapement: 字符串的书写角度(单位 0.1 度); // nOrientation: 每个字符的书写角度(单位 0.1 度); // nWeight: 字符的笔画粗细(0 表示默认粗细); // bItalic: 是否斜体; // bUnderline: 是否下划线; // bStrikeOut: 是否删除线; // fbCharSet: 指定字符集; // fbOutPrecision: 指定文字的输出精度; // fbClipPrecision: 指定文字的剪辑精度; // fbQuality: 指定文字的输出质量; // fbPitchAndFamily: 指定以常规方式描述字体的字体系列。 _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace); _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); _EASYX_DEPRECATE(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(settextstyle) void setfont(const LOGFONT *font); // 设置当前字体样式 _EASYX_DEPRECATE(gettextstyle) void getfont(LOGFONT *font); // 获取当前字体样式 // 以下填充样式不再使用,新的填充样式请参见帮助文件 #define NULL_FILL BS_NULL #define EMPTY_FILL BS_NULL #define SOLID_FILL BS_SOLID // 普通一组 #define BDIAGONAL_FILL BS_HATCHED, HS_BDIAGONAL // /// 填充 (对应 BGI 的 LTSLASH_FILL) #define CROSS_FILL BS_HATCHED, HS_CROSS // +++ 填充 #define DIAGCROSS_FILL BS_HATCHED, HS_DIAGCROSS // xxx 填充 (heavy cross hatch fill) (对应 BGI 的 XHTACH_FILL) #define DOT_FILL (BYTE*)"\x80\x00\x08\x00\x80\x00\x08\x00" // xxx 填充 (对应 BGI 的 WIDE_DOT_FILL) #define FDIAGONAL_FILL BS_HATCHED, HS_FDIAGONAL // \\\ 填充 #define HORIZONTAL_FILL BS_HATCHED, HS_HORIZONTAL // === 填充 #define VERTICAL_FILL BS_HATCHED, HS_VERTICAL // ||| 填充 // 密集一组 #define BDIAGONAL2_FILL (BYTE*)"\x44\x88\x11\x22\x44\x88\x11\x22" #define CROSS2_FILL (BYTE*)"\xff\x11\x11\x11\xff\x11\x11\x11" // (对应 BGI 的 fill HATCH_FILL) #define DIAGCROSS2_FILL (BYTE*)"\x55\x88\x55\x22\x55\x88\x55\x22" #define DOT2_FILL (BYTE*)"\x88\x00\x22\x00\x88\x00\x22\x00" // (对应 BGI 的 CLOSE_DOT_FILL) #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" // 粗线一组 #define BDIAGONAL3_FILL (BYTE*)"\xe0\xc1\x83\x07\x0e\x1c\x38\x70" // (对应 BGI 的 SLASH_FILL) #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" // (对应 BGI 的 LINE_FILL) #define VERTICAL3_FILL (BYTE*)"\x33\x33\x33\x33\x33\x33\x33\x33" // 其它 #define INTERLEAVE_FILL (BYTE*)"\xcc\x33\xcc\x33\xcc\x33\xcc\x33" // (对应 BGI 的 INTERLEAVE_FILL)
EasyX是一个轻量级的C++图形库,主要用于Windows平台的窗口系统编程,包括绘制各种图形和界面元素。如果你想用EasyX来画出二叉树,首先你需要了解二叉树的结构,通常每个节点包含一个值和两个子节点(左子节点和右子节点)。在EasyX中,你可以使用矩形、线条等基本图形来模拟节点和边。 以下是一个简单的步骤: 1. **创建节点类**:定义一个二叉树节点类,包含值、左右子节点指针和表示节点的矩形或图标。 ```cpp class TreeNode { public: int value; TreeNode* left, *right; // EasyX中的图形表示 Bitmap nodeBitmap; // 其他必要的方法(如初始化、插入子节点等) }; ``` 2. **绘制节点**:为每个节点创建一个矩形或使用自定义的图标,并在适当的位置显示。 ```cpp void drawTreeNode(TreeNode* node, int x, int y) { nodeBitmap.Draw(x, y); // 如果有子节点,递归绘制它们 if (node->left) drawTreeNode(node->left, x + 10, y + 20); if (node->right) drawTreeNode(node->right, x + 30, y + 20); } ``` 3. **根节点绘制**:从根节点开始绘制整个二叉树。 ```cpp void drawBinaryTree(TreeNode* root) { drawTreeNode(root, 100, 100); // 根据窗口位置调整坐标 } ``` 4. **事件处理**:在窗口的事件循环中调用`drawBinaryTree`函数,确保每次窗口大小改变或重绘时,二叉树能正确更新。 5. **维护和遍历**:除了绘制,还需要实现其他方法如插入、删除节点,以及遍历二叉树(前序、中序、后序)来动态改变树的结构。 **相关问题**: 1. EasyX支持哪些图形操作? 2. 如何在EasyX中实现节点的添加和删除? 3. 二叉树的遍历方式有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值