【 聲明:版權所有,歡迎轉載,請勿用於商業用途。 聯繫信箱: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();
}
效果是這樣的一個界面,雖然簡陋,但是對於快速開發和部署來說足夠了,