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

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

随想录(easyx开发上位机)相关推荐

  1. Qt开发上位机软件建立经典蓝牙通讯

    Qt开发上位机软件建立经典蓝牙通讯 之前做了一个具有经典蓝牙通讯功能的Windows上位机软件,在网上学习了相关博客以及参考了官方经典蓝牙例程之后,总结出了使用Qt建立经典蓝牙通讯的步骤,附带相关源码 ...

  2. 上位机开发(怎么开发上位机)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 要开发上位机,主要还是看具体的用途是什么.比如说,是不是负责烧入固件:是不是调制参数:是不是监控 ...

  3. 使用C#进行串口通信开发上位机软件

    因为工作需要 曾使用C#开发一款上位机软件,当时工期很赶,开发联调测试交付后就转向其他工作.一直念叨着要记录一下,这次五一终于如愿. 软件开发环境:操作系统windows64位,开发工具:VisioS ...

  4. C++语言Qt实现 串口软件 用于嵌入式软件开发上位机通信调试软件

    我遇到个需求: 目标:开发一个串口上位机软件,用于和单片机等进行串口通信. 内部原理:调用串口类,接收到数据进行解析和显示 效果:提供了友好的简洁美观界面,下面就是软件的界面:(支持hex十六进制显示 ...

  5. MATLAB中GUI界面开发上位机

    MATLAB是一个十分强大的工具,用来制作串口上位机也是不错的选择.虽然一般的上位机是用的C#或者C++编写的,这两者具有强大的系统操作能力或便捷灵活的通信和控制开发能力.但是对于我这种偏硬小白,ma ...

  6. python开发上位机软件-UR机器人通信--上位机通信(python)

    一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...

  7. linux qt开发上位机,QT开发 ROS上位机界面

    前言 最近在给ROS机器人做上位机界面,因为有点C++的基础,也就选择了绿油油的QT来做.作为刚入门的小白,单单是配环境就折磨了我好几天(半路出家,好多坑得爬),做点笔记,但愿以后别重新踩坑,也希望能 ...

  8. 上位机软件用什么写的_用PyQT5开发上位机软件界面(1)

    通过前两篇文章介绍,可以对PLC进行数据的写入及读取.后面几篇文章开始介绍,通过PyQT5自己开发一个简单的控制界面. 1.安装PyQT5. pip install pyqt5 如果出现timeout ...

  9. 485通信原理_上位机开发之单片机通信实践

    经常会有一些学员会问到上位机与单片机之间通信的问题,而我们经常会讲上位机与PLC之间通信,那么其实对上位机开发来说,不管是和PLC通信,还是和单片机通信,通信原理都是一样的.PLC的本质就是单片机,在 ...

最新文章

  1. Cefsharp生成的项目在自己电脑上能打开,其他电脑上不行,提示找不到指定文件cefsharp.core.dll
  2. codeforce R 491 (div2)
  3. app上传头像处理Java_java后台加安卓端实现头像上传功能
  4. 计算机一级考试试题window,全国计算机等级考试一级Window复习题及答案.doc
  5. 英语语法学习2--句子的成分
  6. 妹子每天加班1分钟,半年崩溃!向公司索赔55万!
  7. c语言省二历年真题讲解安徽,安徽省计算机等级二考试真题C语言年12月.doc
  8. vue可以直接进行运算么_Vue实现手机计算器
  9. Android ADB命令?这一次我再也不死记了!【简单说】
  10. Mysql实现企业级数据库主从复制架构实战
  11. Spring中EmptyResultDataAccessException异常产生的原理及处理方法
  12. 《算法设计与分析》一一第3章 线性表的遍历
  13. python体验课是上纯代码_附实战代码|告别OS模块,体验Python文件操作新姿势!...
  14. FTP客户端搭建(linux环境)
  15. Classical Maths Books Intro
  16. python获取网页数据判断并提交_python3爬虫无法通过网页内容判断存在与否?
  17. openstack虚拟机配置vip
  18. 视频回放 | Open Rack V3 - 新一代机架和电源
  19. spritekit 动画_使用SpriteKit在Swift中创建动画
  20. 键盘按键名称及HID扫描码及VK虚拟键码对照表

热门文章

  1. kubeadm源码分析(kubernetes离线安装包,三步安装)
  2. 数据库操作:MFC连接与MYSQL
  3. 解决 RaspberryPi 树莓派 NTP服务异常 无法自动同步时间
  4. slf4j + log4j原理实现及源码分析
  5. 路由器三种口令的设置
  6. 开源 免费 java CMS - FreeCMS1.3-数据对象-report
  7. STM32 GPIO应用
  8. 神经网络----笔记(1)
  9. Linux命令——压缩和解压缩
  10. Ogre学习笔记Basic Tutorial 前四课总结