最近在学习Easyx的使用
在使用图形库Easyx设计界面时常常因为坐标参数的设置而烦恼,少量图形还可以反复调试,而面对大量对象必然耗费大量时间。
于是我就在想能不能设计一个程序可以将图形坐标可视化地反映并输出。
程序功能大致如下:
1,输入画布的宽和高并创建相应窗口
2,连续单击鼠标左键画布上两个坐标,并以这两点为顶点作矩形,输出矩形的坐标参数。
3,单机鼠标中键,在画布上标记点并输出点的坐标
( 由于我的创作需求,我只做了矩形和点的部分。我把源代码放在下面,大家可以按需求自行添加。)
效果大致如图所示:
#include <graphics.h>
#include <stdio.h>
int main(void)
{
int nr = 0;
int np = 0;
TCHAR a[10];
int wide, high;
MOUSEMSG m;
//输入宽,高,并打开画布
scanf_s("%d %d", &wide, &high);
initgraph(wide, high, EW_SHOWCONSOLE);
while (true)
{
//获取鼠标信息
m = GetMouseMsg();
switch (m.uMsg)
{
//矩形部分
case WM_LBUTTONDOWN:
//获取并保存第一个顶点坐标
int x, y;
x = m.x;
y = m.y;
rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
while (m.uMsg != WM_LBUTTONUP)m = GetMouseMsg();
while (m.uMsg != WM_LBUTTONDOWN)m = GetMouseMsg();
int left, right, top, bottom;
rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
//整理坐标信息
if (x < m.x) {
left = x;
right = m.x;
}
else {
left = m.x;
right = x;
}
if (y < m.y) {
top = y;
bottom = m.y;
}
else {
top = m.y;
bottom = y;
}
nr++;
//标记,输出矩形坐标参数
_stprintf_s(a, _T("矩形%d"), nr);
printf("矩形%d:(%d, %d, %d, %d)\n", nr, left, top, right, bottom);
rectangle(left, top, right, bottom);
outtextxy((left + right) / 2, (top + bottom) / 2, a);
break;
//点部分
case WM_MBUTTONDOWN:
//标记点
circle(m.x, m.y, 5);
putpixel(m.x, m.y, WHITE);
np++;
_stprintf_s(a, _T("点%d"), np);
//输出点坐标
printf("点%d:(%d, %d)\n", np, m.x, m.y);
outtextxy(m.x+5, m.y, a);
break;
default:
break;
}
}
}
萌新第一次写blog,之前总是看,终于手痒了╰(°▽°)╯。有什么错误或可以改进的地方欢迎指正。
希望我的文字对你有所帮助。