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

    效果是這樣的一個界面,雖然簡陋,但是對於快速開發和部署來說足夠了,

 

 

發佈了558 篇原創文章 · 獲贊 3631 · 訪問量 475萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章