easyX库其他函数(注释版)

本篇是easyX库系列正文最后一篇,依旧是有几个很有价值的函数,我不补充了几个例子,对easyX库中的部分code例子做了修改。

0.其它函数概览

函数或数据类型描述
GetEasyXVer获取当前EasyX库的版本信息。
BeginBatchDraw开始批量绘图。
EndBatchDraw结束批量绘制,并执行未完成的绘制任务。
FlushBatchDraw执行未完成的绘制任务。
GetHWnd获取绘图窗口句柄。
InputBox以对话框形式获取用户输入。

1.GetEasyXVer:获取当前EasyX库的版本信息

const TCHAR* GetEasyXVer();

没什么好解释的,看看就行。

2.BeginBatchDraw:开始批量绘图

这个函数用于开始批量绘图。执行后任何绘图操作都暂时不输出到绘图窗口上,直到执行FlushBatchDraw()或 EndBatchDraw()才将之前的绘图输出。

void BeginBatchDraw();

这样做的原因是为了保证画面流畅度,若一直输出绘画会出现明显的闪烁问题,下面是easyX文档中给出的对比例子:

//一个例子
//您可以试着同时取消下面两个函数的注释,然后运行下面的代码,来对比没有同时去掉注释的代码效果
#include <graphics.h>

int main()
{
	initgraph(640,480);
	//BeginBatchDraw();

	setlinecolor(WHITE);
	setfillcolor(RED);

	for(int i=50; i<600; i++)
	{
		cleardevice();
		circle(i, 100, 40);
		floodfill(i, 100, WHITE);
		//FlushBatchDraw();
		Sleep(10);
	}

	EndBatchDraw();
	closegraph();
}

3.FlushBatchDraw:执行未完成的绘制任务

//执行未完成的绘制任务
void FlushBatchDraw();

//执行指定区域内未完成的绘制任务
void FlushBatchDraw(
	int left,
	int top,
	int right,
	int bottom
); 
//参数
//left:定区域的左部x坐标。
//top:指定区域的上部y坐标。
//right:指定区域的右部x坐标。
//bottom:指定区域的下部y坐标。

//返回值
//无

4.EndBatchDraw:结束批量绘制并执行未完成的绘制任务

//结束批量绘制,并执行未完成的绘制任务
void EndBatchDraw();

//结束批量绘制,并执行指定区域内未完成的绘制任务
void EndBatchDraw(
	int left,
	int top,
	int right,
	int bottom
);
//参数 
//left:定区域的左部x坐标。 
//top:指定区域的上部y坐标。 
//right:指定区域的右部x坐标。 
//bottom:指定区域的下部y坐标。 

//返回值 
//无

FlushBatchDraw()和EndBatchDraw()的区别可以通过下面的等价代码看出来:

//一个例子
//批量绘制写法1
#include <graphics.h>
int main()
{
	initgraph(640,480);
	BeginBatchDraw();

	setlinecolor(WHITE);
	setfillcolor(RED);

	for(int i=50; i<600; i++)
	{
		cleardevice();
		circle(i, 100, 40);
		floodfill(i, 100, WHITE);
		FlushBatchDraw();
		Sleep(10);
	}

	EndBatchDraw();
	closegraph();
}
//----------------------------------
//批量绘制写法2
//(从思路上应该是等价的,但是可能效率会低一些我没有细致验证过这件事情,只是光看图形的显示效果)
#include <graphics.h>
#include <stdio.h>
int main()
{
	initgraph(640, 480, EX_SHOWCONSOLE);
	BeginBatchDraw();

	setlinecolor(WHITE);
	setfillcolor(RED);

	for (int i = 50; i < 600; i++)
	{
		cleardevice();
		circle(i, 100, 40);
		floodfill(i, 100, WHITE);
		//FlushBatchDraw();
		EndBatchDraw();
		BeginBatchDraw();
		Sleep(10);
	}

	EndBatchDraw();
	getchar();
	closegraph();
}

意思就是,EndBatchDraw()会直接把所有绘制输出,并且退出批量绘制的状态。但是FlushBatchDraw()在把所有绘制输出的同时,不会退出批量绘制的状态。

批量绘制使得easyX库绘制动画变为可能。

5.GetHWnd:获取绘图窗口句柄

HWND GetHWnd();

//参数
//无

//返回值
//返回绘图窗口句柄。

在Windows中,句柄是一个窗口的标识(您可以简单理解为一个指向窗口的特殊指针),得到句柄后就可以用Windows API中的函数实现对窗口的控制。(注意请不要通过该窗口句柄获取窗口的DC然后利用GDI函数实现对窗口的绘图操作。由于实现机制的问题,获取窗口的DC请使用GetImageHDC())easyX库文档在这里演示了一个使用API的例子:

//引入easyX头文件
#include <graphics.h>
#include <stdio.h>
int main()
{
    //初始化图形环境
    initgraph(640, 480, EX_SHOWCONSOLE);

    //获得窗口句柄
    HWND hWnd = GetHWnd();

    //使用 Windows API 修改窗口名称
    SetWindowTextW(hWnd, _T("Hello!"));

    //其他绘图操作和逻辑代码
    getchar();

    //关闭图形环境
    closegraph();

    return 0;
}

在这里插入图片描述

6.InputBox:以对话框形式获取用户输入

bool InputBox(
	LPTSTR	pString,
	int		nMaxCount,
	LPCTSTR	pPrompt = NULL,
	LPCTSTR	pTitle = NULL,
	LPCTSTR	pDefault = NULL,
	int		width = 0,
	int		height = 0,
	bool	bHideCancelBtn = true
);
//参数
//pString:指定接收用户输入字符串的指针。
//nMaxCount:指定pString指向的缓冲区的大小,该值会限制用户输入内容的长度。缓冲区的大小包括表示字符串结尾的'\0'字符!!!当允许多行输入时,用户键入的回车占两个字符位置!!!
//pPrompt:指定显示在对话框中的提示信息。提示信息中可以用“\n”分行。InputBox的高度会随着提示信息内容的多少自动扩充。如果该值为NULL,则不显示提示信息。
//pTitle:指定InputBox的标题栏。如果为NULL,将显示应用程序的名称。
//pDefault:指定显示在用户输入区的默认值。
//width:指定InputBox的宽度(不包括边框),最小为200像素。如果为0,则使用默认宽度。
//height:指定 InputBox 的高度(不包括边框)。如果为0,表示自动计算高度,用户输入框只允许输入一行内容,按“回车”确认输入信息;如果大于0,用户输入框的高度会自动拓展,同时允许输入多行内容,按“Ctrl+回车”确认输入信息。
//bHideCancelBtn:指定是否隐藏取消按钮禁止用户取消输入。如果为true(默认),InputBox 只有一个“确定”按钮,没有“X”关闭按钮,按ESC无效;如果为false,InputBox有“确定”和“取消”按钮,允许点“X”和按ESC关闭窗口。

//返回值
//返回用户是否输入信息。如果用户按“确定”,返回true;如果用户按“取消”,返回false。

下面举一个例子:

#include <graphics.h>
#include <stdio.h>
int main()
{
	//1.初始化绘图窗口
	initgraph(640, 480, EX_SHOWCONSOLE);
	//2.定义字符串缓冲区,并接收用户输入
	wchar_t s[10];
	while (1)
	{
		InputBox(s, 10, _T("请输入半径"), _T("画圆小程序"), _T("100"), 50,50, true);
		//3.将用户输入转换为数字
		int r = _wtoi(s);
		//4.画圆
		circle(320, 240, r);
	}
	//5.按任意键退出
	getchar();
	closegraph();
	return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是基于EasyX实现冒泡排序可视化的C++程序,注释在代码中: ```c++ #include <graphics.h> #include <conio.h> #include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int NUM = 50; // 数组元素个数 const int INTERVAL = 20; // 每个矩形之间的间距 const int WIDTH = 10; // 矩形宽度 const int HEIGHT = 500; // 矩形高度 int nums[NUM]; // 存储随机数的数组 void initNums() { srand((unsigned)time(NULL)); // 设置随机数种子 for (int i = 0; i < NUM; i++) { nums[i] = rand() % (HEIGHT / 10) + 1; // 随机生成一个 1~50 的整数 } } void drawNums() { cleardevice(); // 清空画布 for (int i = 0; i < NUM; i++) { int x = i * (WIDTH + INTERVAL) + INTERVAL; // 计算矩形的左上角横坐标 int y = HEIGHT - nums[i] * 10 + INTERVAL; // 计算矩形的左上角纵坐标 setfillcolor(BLUE); // 设置填充颜色 solidrectangle(x, y, x + WIDTH, HEIGHT + INTERVAL); // 绘制矩形 } } void bubbleSort() { for (int i = 0; i < NUM - 1; i++) { for (int j = 0; j < NUM - 1 - i; j++) { if (nums[j] > nums[j + 1]) { swap(nums[j], nums[j + 1]); // 交换相邻两个数 drawNums(); // 重新绘制矩形 delay_ms(50); // 延时 50ms } } } } int main() { initgraph(900, 600); // 创建绘图窗口 initNums(); // 初始化随机数数组 drawNums(); // 绘制矩形 bubbleSort(); // 执行冒泡排序 getch(); // 等待用户按下任意键 closegraph(); // 关闭绘图窗口 return 0; } ``` 在代码中,我们使用了EasyX提供的`initgraph`函数创建了一个900x600的绘图窗口,并定义了一些常量,如矩形宽度、高度、间距等。我们通过`initNums`函数生成了50个随机数,并使用`drawNums`函数将这些随机数绘制成蓝色的矩形。 在`bubbleSort`函数中,我们使用了两层for循环来实现冒泡排序。每次比较相邻的两个数,如果前一个数大于后一个数,则交换它们。在交换两个数后,我们调用`drawNums`函数重新绘制矩形,然后使用`delay_ms`函数延迟50ms,以便让用户看清楚这个过程。 最后,我们在`main`函数中按照如下顺序执行了几个函数:创建绘图窗口、初始化随机数、绘制矩形、执行冒泡排序、等待用户按下任意键、关闭绘图窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limou3434

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值