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
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

limou3434

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

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

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

打赏作者

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

抵扣说明:

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

余额充值