随想录(easyx开发上位机)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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();
}

    效果是这样的一个界面,虽然简陋,但是对于快速开发和部署来说足够了,

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值