图灵院作业 封面为实现结果
通过按下不同键盘按键来切换不同颜色的画笔
通过鼠标左键按下和移动来实现画线的操作
#include<iostream>
#include<easyx.h>
using namespace std;
struct Point
{
int x;
int y;//点的坐标
};
struct PaintTool//画线
{
int size;//画笔粗细
COLORREF color;//画笔颜色
Point start;//线的开始
int lButtonDown;
};
PaintTool paintBlack = { 4,BLACK,{0,0},0 };//黑色画笔
PaintTool paintPink = { 13,RGB(255,174,201),{0,0},0};//粉色画笔
PaintTool paintWhite = { 6,WHITE,{0,0},0 };
PaintTool paintRed = { 6,RED,{0,0},0 };
void drawLine(ExMessage msg,PaintTool *paint)
{
//如果左键按下记下现在的起点
if (msg.message == WM_LBUTTONDOWN)//开始点鼠标左键摁下
{
paint->lButtonDown = 1;
paint->start.x = msg.x;
paint->start.y = msg.y;
}
if (msg.message == WM_LBUTTONUP)//结束点鼠标左键弹起
{
paint->lButtonDown = 0;
}
//左键摁下并且鼠标移动开始画画
if (msg.message == WM_MOUSEMOVE && paint->lButtonDown == 1)
{
setlinestyle(PS_SOLID, paint->size);//设置线为实线,粗细
setlinecolor(paint->color);
line(paint->start.x, paint->start.y, msg.x, msg.y);
}
paint->start.x = msg.x;//下一条线的开始点为当前鼠标的位置
paint->start.y = msg.y;
}
//根据摁下不同的键盘按键切换不同颜色的画笔
void selectPaintTool(ExMessage msg, PaintTool* paint)//引用传递不然就白改了
{
if (msg.message == WM_KEYDOWN)//键盘按下
{
switch (msg.vkcode)//按下的是哪一个键
{
case 'B'://必须必须得用大写字母
*paint = paintBlack;
break;
case 'R':
*paint = paintRed;
break;
case 'W':
*paint = paintWhite;
break;
case'P':
*paint = paintPink;
break;
default:
break;
}
}
}
int main()
{
initgraph(640, 480, EX_SHOWCONSOLE);//创建图形窗口
setbkcolor(WHITE);//设置背景颜色
cleardevice();
ExMessage msg = { 0 };
PaintTool paint = paintBlack;
while (true)
{
BeginBatchDraw();//双缓冲,进行绘画内容
if(peekmessage(&msg, EX_MOUSE|EX_KEY));//接受鼠标,键盘信息
{
selectPaintTool(msg, &paint);
drawLine(msg, &paint);
}
EndBatchDraw();
msg.message = 0;
}
getchar();
return 0;
}