【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
easyx是模仿graphics开发的一个图形库,因为它除了绘制图像之外,还支持键盘和鼠标的输入,所以事实上可以用来做一个实用的简单上位机。为了实现这个目的,可以分成两个步骤来完成。第一步,绘制基本图像,第二部处理鼠标消息。
1、绘制图像
如果只是简单的图像,可以绘制一个方框,再打印一些文字就可以了。
setfillcolor(BLUE);
fillrectangle(0, 20 * i, 80, 20*(i+1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = {0, 20 * i, 80, 20*(i+1) };
drawtext(name1[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
2、响应鼠标消息
MOUSEMSG msg = GetMouseMsg();
RECT r1 = { 0, 0, 80, 20 };
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
case WM_MBUTTONDBLCLK:
time += 1;
if (time % 2)
{
setfillcolor(BLUE);
}
else
{
setfillcolor(GREEN);
}
fillrectangle(0, 0, 80, 20);
setbkmode(TRANSPARENT);
settextcolor(RED);
drawtext(_T("A1"), &r1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
break;
default:
break;
}
3、效果图
4、完整代码
#include <graphics.h>
#include <conio.h>
int main()
{
// 绘图窗口初始化
initgraph(640, 480);
// 在屏幕中央显示字符
WCHAR* name1[] = { _T("A1"),
_T("A2"),\
_T("A3"),\
_T("A4"), \
_T("A5"), \
_T("A6"), \
_T("A7"), \
_T("A8"), \
_T("A9"), \
_T("A10"), \
_T("A11"), \
_T("A12"), \
_T("A13"), \
_T("A14"), \
_T("A15"), \
_T("A16"), \
_T("A17"), \
_T("A18"), \
_T("A19"), \
_T("A20"), \
};
int i;
for (i = 0; i < sizeof(name1) / sizeof(char*); i++)
{
setfillcolor(BLUE);
fillrectangle(0, 20 * i, 80, 20*(i+1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = {0, 20 * i, 80, 20*(i+1) };
drawtext(name1[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 在屏幕中央显示字符
WCHAR* name2[] = { _T("B1"), \
_T("B2"), \
_T("B3"),\
_T("B4"), \
_T("B5"), \
_T("B6"), \
_T("B7"), \
_T("B8"), \
};
for (i = 0; i < sizeof(name2) / sizeof(char*); i++)
{
setfillcolor(GREEN);
fillrectangle(100, 20 * i, 180, 20 * (i + 1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = { 100, 20 * i, 180, 20 * (i + 1) };
drawtext(name2[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 在屏幕中央显示字符
WCHAR* name3[] = { _T("C1"), \
_T("C2"), \
_T("C3"), \
_T("C4"), \
};
for (i = 0; i < sizeof(name3) / sizeof(char*); i++)
{
setfillcolor(BLUE);
fillrectangle(200, 20 * i, 280, 20 * (i + 1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = { 200, 20 * i, 280, 20 * (i + 1) };
drawtext(name3[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 在屏幕中央显示字符
WCHAR* name4[] = { _T("D1"), \
_T("D2"), \
_T("D3"), \
_T("D4"), \
_T("D5"), \
_T("D6"), \
_T("D7"), \
_T("D8"), \
_T("D9"), \
_T("D10"), \
_T("D11"), \
_T("D12"), \
};
for (i = 0; i < sizeof(name4) / sizeof(char*); i++)
{
setfillcolor(GREEN);
fillrectangle(300, 20 * i, 380, 20 * (i + 1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = { 300, 20 * i, 380, 20 * (i + 1) };
drawtext(name4[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 在屏幕中央显示字符
WCHAR* name5[] = { _T("E1"), \
_T("E2"), \
_T("E3"),\
_T("E4"), \
};
for (i = 0; i < sizeof(name5) / sizeof(char*); i++)
{
setfillcolor(BLUE);
fillrectangle(400, 20 * i, 480, 20 * (i + 1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = { 400, 20 * i, 480, 20 * (i + 1) };
drawtext(name5[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 在屏幕中央显示字符
WCHAR* name6[] = { _T("F1"), \
_T("F2"), \
_T("F3"),\
_T("F4"), \
};
for (i = 0; i < sizeof(name6) / sizeof(char*); i++)
{
setfillcolor(GREEN);
fillrectangle(500, 20 * i, 580, 20 * (i + 1));
setbkmode(TRANSPARENT);
settextcolor(RED);
RECT r = { 500, 20 * i, 580, 20 * (i + 1) };
drawtext(name6[i], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// 获取鼠标消息
while (1)
{
static int time = 1;
MOUSEMSG msg = GetMouseMsg();
RECT r1 = { 0, 0, 80, 20 };
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
case WM_MBUTTONDBLCLK:
time += 1;
if (time % 2)
{
setfillcolor(BLUE);
}
else
{
setfillcolor(GREEN);
}
fillrectangle(0, 0, 80, 20);
setbkmode(TRANSPARENT);
settextcolor(RED);
drawtext(_T("A1"), &r1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
break;
default:
break;
}
}
// 按任意键退出
_getch();
closegraph();
return 0;
}
其他:
如果需要字符输入,那么InputBox是一个不错的选项,
// input.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#pragma warning (disable:4996)
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
// 初始化绘图窗口
initgraph(640, 480);
// 定义字符串缓冲区,并接收用户输入
WCHAR s[10];
InputBox((LPTSTR)s, 10, _T("Please input data:"));
// 将用户输入转换为数字
int r;
swscanf(s, _T("%d"), &r);
// 画圆
circle(320, 240, r);
// 按任意键退出
_getch();
closegraph();
}
效果是这样的一个界面,虽然简陋,但是对于快速开发和部署来说足够了,