随想录(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、效果图

扫描二维码关注公众号,回复: 8831536 查看本文章

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();
}

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

发布了556 篇原创文章 · 获赞 3622 · 访问量 473万+

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/103753924