#include<iostream>
#include<conio.h>
#include<graphics.h>
#include<string.h>
#define PINK 0xEF88BE//用十六进制定义粉色
using namespace std;
int main()
{
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);//画笔初始颜色为黑色
int pensize=1;//设置笔刷大小,初始为1
ExMessage msg;
setlinestyle(PS_SOLID, pensize);//设置线为直线,以及设置尺寸,每一段微小直线会形成曲线
while (1)
{
char a;
if (_kbhit())//判断是否有键盘输入
{
a = _getch();
if (a == 27)//如果按下Esc键退出程序
break;
else if (strcmp(&a, "q") == 1 && pensize < 25)
{
pensize++;
setlinestyle(PS_SOLID, pensize);
}
else if (strcmp(&a, "e") == 1 && pensize > 1)//按q或e改笔大小
{
pensize--;
setlinestyle(PS_SOLID, pensize);
}
else if (strcmp(&a, "d") == 1)//换色
{
if (getlinecolor() == BLACK)
setlinecolor(WHITE);
else if (getlinecolor() == WHITE)
setlinecolor(PINK);
else if (getlinecolor() == PINK)
setlinecolor(RED);
else if (getlinecolor() == RED)
setlinecolor(BLACK);
}
else if (strcmp(&a, "a") == 1)
{
if (getlinecolor() == BLACK)
setlinecolor(RED);
else if (getlinecolor() == WHITE)
setlinecolor(BLACK);
else if (getlinecolor() == PINK)
setlinecolor(WHITE);
else if (getlinecolor() == RED)
setlinecolor(PINK);
}
}
else if (MouseHit())//判断是否在使用鼠标
{
msg = getmessage(EX_MOUSE);//若是则获取鼠标信息
int x = msg.x, y = msg.y;//并设置使用鼠标时的点为起始点(也可防止上一次鼠标抬起后,起始点留在抬起处导致下一次画线起点和此处形成直线)
if (msg.message == WM_LBUTTONDOWN)//如果用了鼠标左键则开始循环画线
{
while (1)
{
msg = getmessage(EX_MOUSE);//重新获取信息,更新信息,让message为WM_MOUSEMOVE,使下条if正常进行
if (x >= 0 && y >= 0 && msg.message == WM_MOUSEMOVE)
line(x, y, msg.x, msg.y);//开始画线
x = msg.x, y = msg.y;//每过一小段就更新起点到当前位置
if (msg.message == WM_LBUTTONUP)//如果左键抬起则退出循环停止画线
break;
}
}
}
}
closegraph();
return 0;
}
easyx写简单的画板
最新推荐文章于 2023-10-21 14:13:04 发布