基于可视化的C++ EasyX/ 管理系统_附源码

本文介绍了基于C++和EasyX库开发的职工管理系统,讲解了EasyX的基本概念、函数分类和使用方法,包括颜色、坐标、设备等基础知识。通过示例代码展示了如何实现职工信息的增删改查功能,涉及文件操作、鼠标交互等。并提供完整源码供参考。
摘要由CSDN通过智能技术生成

本文章适用于,有一定C++基础,大概看过一部分EasyX文档中的函数,的人。

什么是EasyX
按照我的理解:EasyX是一个函数库(当然,里面不止有函数,这么说可能会让初学者更好理解),就像我们的基本输入输出函数库(iosteam)一样,EasyX的所有功能也是在函数库中实现的,官网下载的EasyX安装程序所安装的主要文件就是两个函数库: easyx.h 以及graphics.h ,所有的函数功能均在这两个函数库中实现.

优点:简单,便捷,我们只需要会使用其中的函数画图就行了. 吐槽:内容少,难以开发大项目,难以有沉浸式体验,部分函数可能用起来不是那么符合你的习惯.

关于开发环境
EasyX的官方安装器只支持VS,  本来用的是Codeblocks,至于为什么这两个头文件不能运行,网上说不支持编译器gcc,看兼容教程要改EasyX里的一些东西,为了防止改错(主要是绝对麻烦)干脆用vs2017了

EasyX的使用教程
EasyX的官网 具有详细的参考文档,包含了一切函数的具体用法说明,下面仅介绍我的观看思路,遇到的问题与解决方案

基础原理
三个基本概念:颜色,坐标,设备;
颜色, 采用了RGB颜色方案,即:红,蓝,绿,三种颜色按不同比例混合后的颜色,如果我们不知道某个颜色的取值,可以使用网上的一些取色工具。

坐标,从窗口的左上角开始为0,向右为x方向,向下为y方向,单位为像素

设备,即绘图窗口,也就是用户可以看见的窗口,以后的绘图都在这个窗口上进行

宽字符
UNICODE编码字符,叫宽字节字符。

UNICODE编码,每个字符占二个字节。也叫万国码(一种国际标准字符集,为世界上绝大多数已知的字符集定义了唯一的16位数值)

EasyX所有的字符使用的均为宽字符,也就是 wchar_t ,需要在字符串前面加L来表示这是一个宽字符集 比如 L"我是一个字符串" 就是一个宽字符集的字符串;

关于宽字符集与字符串之间的转化,(该部分 转载至该博客 ),如果会,可跳过
1.MultiByteToWideChar函数

函数功能:该函数将一个字符串到转换成一个宽字符(unicode)的字符串。

函数原型:

int MultiByteToWideChar(

UINT CodePage,

DWORD dwFlags,

LPCSTR lpMultiByteStr,

int cchMultiByte,

LPWSTR lpWideCharStr,

int cchWideChar

);

 第一个参数CodePage:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。 可选值:

CP_ACP:ASCII字符集;

CP_UTF7:使用UTF-7转换;

CP_UTF8:使用UTF-8转换;

 第二个参数dwFlags:一般用 0

 第三个参数lpMultiByteStr: ASCII 字符串的地址, 这个字符串是第一个参数指定的语言的 ASCII 字符串

 第四个参数cchMultiByte: ASCII 字符串的长度,如果用 -1, 就表示是用 '\0' 作为结束符的字符串

 第五个参数 lpWideCharStr,:转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度

第六个参数cchWideChar:转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符,若此值为零,函数将返回缓冲区所必需的宽字符数。

因此该函数一般使用两次:

第一次获取转换成unicode所需要的长度

第二次才是真正的把一个字符串转换为unicode,代码如下:

char* mbs = "中国,你好!I Love You!";

int length = MultiByteToWideChar( CP_ACP, 0, mbs, -1, NULL, 0 );

wchar_t* wcs = new wchar_t[ length ];

MultiByteToWideChar( CP_ACP, 0, mbs, -1, wcs, length );

delete wcs;

wcs = NULL;

2.WideCharToMultiByte函数

函数功能:该函数将一个宽字符(unicode)转换为字符串的函数。

函数原形:

int WideCharToMultiByte(

UINT *CodePage*, //指定执行转换的代码页

DWORD *dwFlags*, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符,一般设置为NULL

LPCWSTR *lpWideCharStr*, //指定要转换为宽字节字符串的缓冲区

int *cchWideChar*, //指定由参数lpWideCharStr指向的缓冲区的字符个数

LPSTR *lpMultiByteStr*, //指向接收被转换字符串的缓冲区

int *cchMultiByte*, //指定由参数lpMultiByteStr指向的缓冲区最大值

LPCSTR *lpDefaultChar*, //当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在CodePage参数标识的代码页中并没有它的表示法时,WideCharToMultiByte函数才使用这两个参数。如果宽字节字符不能被转换,该函数便使用lpDefaultChar参数指向的字符。如果该参数是NULL(这是大多数情况下的参数值),那么该函数使用系统的默认字符。该默认字符通常是个问号。

LPBOOL *pfUsedDefaultChar* //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE

);

代码如下:

Wchar_t* wcs = _T("中国,你好!I Love You!");

int length = WideCharToMultiByte( CP_ACP, 0, wcs, -1, NULL, 0, NULL, NULL);

char* mbs = new char[ length ];

WideCharToMultiByte( CP_ACP, 0, wcs, -1, mbs, length, NULL, NULL);  

delete mbs;

mbs = NULL;

以上方法只适用于char数组与wchar_t数组的转化 ,更多的,如果我们用到了字符串(string),那么我们还需要: 字符串与char数组的转化 :

一、string 转 char*

主要有三种方法可以将 str 转换为 char* 类型,分别是:data(); c_str(); copy;

1、data() 方法:

string str = "hello world";

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值