当前位置 博文首页 > 吴斌_qM的博客:简易绘图工具(后续会优化)
#include <graphics.h>
struct Point
{
int x;
int y;
};
struct LineTool
{
int size; //大小
COLORREF color; //颜色
struct Point beginPos; //线的起点
bool isDown; //两个鼠标操作判断开发
};
struct LineTool* createLineTool(int size, COLORREF color)
{
struct LineTool* pLine = (struct LineTool*)malloc(sizeof(struct LineTool));
if (pLine == NULL)
return NULL;
pLine->color = color;
pLine->size = size;
pLine->isDown = false;
return pLine;
}
void drawLine(struct LineTool* pTool, MOUSEMSG m)
{
//鼠标左键按下
if (m.uMsg == WM_LBUTTONDOWN)
{
pTool->beginPos.x = m.x;
pTool->beginPos.y = m.y;
pTool->isDown = true;
}
//鼠标左键弹起
if (m.uMsg == WM_LBUTTONUP)
{
pTool->isDown = false;
}
//鼠标移动+左键按下
if (m.uMsg == WM_MOUSEMOVE && pTool->isDown == true)
{
setlinestyle(PS_ENDCAP_ROUND, pTool->size);
setlinecolor(pTool->color);
line(pTool->beginPos.x, pTool->beginPos.y, m.x, m.y);
}
pTool->beginPos.x = m.x;
pTool->beginPos.y = m.y;
}
//颜色版
struct ColorTool
{
int x;
int y;
int r;
COLORREF color;
};
struct ColorTool* createColorTool(int x, int y, int r, COLORREF color)
{
struct ColorTool* pColor = (struct ColorTool*)malloc(sizeof(struct ColorTool));
if (pColor == NULL)
return NULL;
pColor->x = x;
pColor->y = y;
pColor->r = r;
pColor->color = color;
return pColor;
}
void drawColorTool(struct ColorTool* pColor)
{
setfillcolor(pColor->color);
solidcircle(pColor->x, pColor->y, pColor->r);
}
void drawRectangle()
{
//set:设置 fill:填充 color:颜色
setfillcolor(RGB(239, 239, 239));
solidrectangle(1000 - 100, 0, 1000, 800);
}
int main()
{
//逻辑
initgraph(1000, 800);
setbkcolor(WHITE);
cleardevice();
struct LineTool* pLine = createLineTool(5, BLACK);
while (1)
{
drawRectangle();
while (MouseHit())
{
MOUSEMSG m = GetMouseMsg(); //获取鼠标消息
drawLine(pLine, m);
}
}
closegraph();
return 0;
}
cs