GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

时间:2022-03-07 04:00:48

标签:emWin教程emWin入门教程

备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就根基会用emWin做项目,其他章节可以需要时再参考。
 emWin和ucGUI是一样的,只是名称差别而已。emWin是德国SEGGER公司一个嵌入式GUI图形库,GUI图形库的观点就仿佛它是一个平台,我们只需要在这个平台上通过其供给的要领写本身的用户界面应用措施就行,非常简单、便捷。如果没有这个GUI图形库,我们的应用措施还需要考虑按键、编纂框、下拉菜单等控件的绘制,以及控件各类成果的实现,还需要打点各个控件、窗口、页面它们之间的彼此关系,还需要做触摸屏/鼠标/键盘的打点等等,这长短常麻烦而且容易堕落的工作;如果使用emWin,这些工作都是由emWin去措置惩罚惩罚的,所有的成果根基上是通过挪用API函数完成。
  因为emWin的用户应用措施布局明白,开始学习emWin最好的要领是先掌握它的界面应用措施的布局;所有的emWin界面应用措施,对付每个页面,都是由三部分构成:(1)控件布局体数组 (2)回调函数 (3) 页面创建函数;此外增补三个元素:(1)控件句柄 (2)控件ID (3)动静。
static const GUI_WIDGET_CREATE_INFO_aDialogCreate[] =//控件布局体数组
{
控件(ID_0)
控件(ID_1)
......
控件(ID_x)

};
static void _cbDialog(WM_MESSAGE* pMsg)//回调函数
{
case WM_PAINT://窗口重绘动静,这个对照难说大白,横竖在Framewin或Window窗口之中我们一般是用控
        //件,如果要在Framewin或Window窗口之中显示文字或绘制直线、矩形、圆等在这里实现

......
case WM_INIT_DIALOG://初始化动静,创建窗口/控件时有效,好比在这里设置一些控件的初始参数
......
case WM_NOTIFY_PARENT://操纵触动员静措置惩罚惩罚(操纵屏幕措施会跑到这里),好比点击按键、点击编纂框(任何的操纵)等等......
......
}
句柄= GUI_CreateDialogBox(控件布局体数组,回调函数,父窗口句柄);//页面创建函数,返回该页面句柄
(1)控件布局体数组包罗一个页面的全部使用到的控件。
(2)每个页面都对应一个回调函数,横竖界面的任何操纵都在这个回调函数里面用措施措置惩罚惩罚。
(3)每个页面或控件都对应一个句柄,通过句柄和ID可以找到和打点任何的页面或控件,子父窗口/控件是隶属关系。
  刚开始接触emWin,千万不要去研究怎么移植驱动或者研究emWin的事情机理,只管用C语言去做界面就好;可以买个STM32+320*240液晶屏的开发板,也可以不买STM32开发板只在emWin脱机模拟仿真开发平台(VC或CodeBlocks)上写界面措施,不要怀疑在emWin模拟开发平台上写的界面措施在STM32上运行不了,100%不用改削直接能跑!只有一个处所需要考虑的是:STM32和emWin模拟开发平台的内存RAM巨细是不一样的,STM32的RAM不够的话emWin界面措施是跑不起来的。
  要做到快速开发emWin界面措施,必然要借助脱机模拟仿真开发平台(VC或CodeBlocks)在电脑上先做好界面,如果直接在STM32开发环境直接做界面,加上对emWin不熟悉,不停下载测试将花费非常非常多的时间!
  开始时可以借助emWin的配套工具GUIBuilder做界面然后生成C代码,通过阅读生成的C代码去掌握emWin界面应用措施的框架和编程要领;但GUIBuilder成果对照弱智,,因此只能设计一个初阶的界面;其实emWin真正强大的处所是通过C语言和API函数实现千变万化的界面,当你熟悉其C语言界面编程要领之后(事实上emWin界面编程是对照简单的),你就会感受本来做个界面如此简单!

1.需要安置的软件:
(1) emWin脱机模拟仿真软件:codeblocks-13.12mingw-setup(”软件/资料下载”栏目可下载)
(2) 下载并解压emWin模拟器版本:SeggerEval_WIN32_MSVC_MinGW_GUI_V528(”软件/资料下载”栏目可下载)

2.运行emWin自带的DEMO措施
(1) 解压SeggerEval_WIN32_MSVC_MinGW_GUI_V528之后用CodeBlocks打开工程工程文件:SimulationTrial.cbp然后编译工程:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(2) 运行emWin自带的DEMO措施:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改




完了,是不是出格简单?




3.实现最简单的emWin界面
备注:如需要改削emWin的辨别率,可以通过改削..\Config\LCDConf.c文件实现:
#defineXSIZE_PHYS  320
#define YSIZE_PHYS  240

(1)删除SeggerEval_WIN32_MSVC_MinGW_GUI_V528/Application目录下的所有文件(只剩下GUIDEMO_Start.c),并改削GUIDEMO_Start.c:
#include "dialog.h"
void MainTask(void)
{
    GUI_Init();//初始化emWin/ucGUI
    CreateFramewin(WM_HBKWIN); //创建窗体,父窗体是桌面配景
    while(1) {GUI_Delay(20);} //挪用GUI_Delay函数延时20MS(最终目的是挪用GUI_Exec()函数)
}

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



操作emWin的配套工具GUIBuilderV530(”软件/资料下载”栏目可下载),我们可实现组态、拖放式人机用户界面设计;GUIBuilder操纵界面非常简单、一目了然;GUIBuilder生成的界面文件是标准C文件,将生成的C文件加到emWin工程中并在emWin这个图形库平台上运行,即可显示你所设计的界面;每生成一个界面C文件即对应一个页面,如果要设计多个页面的界面怎么办?生成多个界面C文件并在回调函数的操纵触动员静顶用WM_HideWindow()和WM_ShowWindow()函数实现界面切换措施即可:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(2)值得注意的是emWin的每个界面都必需有一个Framewin/Window控件作为父窗体,这里我们添加一个Framewin控件做父窗体:
备注:如果我需要一个纯色的配景桌面怎么办?那就放一个Window做父窗体(生存为单独C文件),其他Framewin/Window都作为它的子窗体。
备注:必然要记住emWin子父窗体/控件观点的重要性(前面有说)!

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(3)添加一个Button控件并右键改削Button名称和字体(Button控件还有很多改削属性的API函数,只是GUIBuilder没有而已,可通过改削C文件现实,这个时候需要查阅emWin仿单的Button控件API函数):
小技巧:安排xxxx控件之后不要用鼠标移动,用上下摆布建移动更容易对齐(步进是5)。

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(4)添加一个Checkbox控件并设置文字、字体、颜色等(Checkbox控件还有很多改削属性的API函数,只是GUIBuilder没有而已,可通过改削C文件现实,这个时候需要查阅emWin仿单的Checkbox控件API函数):
小技巧:安排xxxx控件之后不要用鼠标移动,用上下摆布建移动更容易对齐(步进是5)。

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(5)将界面生存为C文件:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(6)将适才用GUIBuilder生成的C文件”FramewinDLG.c”复制到SeggerEval_WIN32_MSVC_MinGW_GUI_V528/Applicatio目录,并用CodeBlocks打开工程文件:SimulationTrial.cbp

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(7)删除工程Applicatio下面本来的文件并把GUIDEMO_Start.c和FramewinDLG.c添加进来,然后编译工程:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(8)运行:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(10)到目前为止,在Framewin窗体上的Button和Checkbox控件还是完全独立的,也就是除了能点击和显示以外,还没有任何的成果,那么我们怎么为这两个控件添加成果措施呢?好比我们想通过Button控件去控制Checkbox控件的选择状态,那么我们可以通过改削FramewinDLG.c文件的措施实现,在WM_NOTIFY_PARENT动静中(操纵屏幕时措施跑到这里)插手以下措施:
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);//获取ID_CHECKBOX_0控件句柄
if(CHECKBOX_IsChecked(hItem)) CHECKBOX_Uncheck(hItem);//ID_CHECKBOX_0打消选择
else CHECKBOX_Check(hItem);// ID_CHECKBOX_0打勾选择

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



改为中文显示:
备注:GUIBuilder工具目前不撑持中文,因此只能在CodeBlocks做界面模拟仿真时再改为中文显示。
(1)在例程中插手以下两个文件(可以在GLCD资料包的”helloPRJ_WINemWin530noOS_CodeBlocks_GBK.rar”例程中找到),GBK_16m16.c是字库C文件,GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(2)设置emWin为GBK编码:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(3)改削中文显示:
备注:使用GBK编码Code::Blocks需要做以下设置,否则生存C文件时将自动被改为UTF8编码。

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改




源码/软件下载


附录:emWin仿单解读
emWin仿单有一千多页,对付初学者来说,通过emWin仿单来学会做界面是不成能的(不管花几多时间),emWin仿单独一的用处是在做界面的过程中查阅相关的API函数,其API函数总共分三大类:
(1)2D绘图类,函数以”GUI_”开头,包孕文字显示(注:不是控件上面的文字)、线/圆/矩形等的绘制、图片/影片显示、字体/颜色设置等等...

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(2)窗口打点类,函数以”WM_”开头,好比隐藏/显示某个窗口、禁止/使能某个窗口、使某个窗口或区域无效以重绘、移动某个窗口/控件、判断某个窗口是否可见或被笼罩等等...

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改



(3)控件类,函数以”XXXX_”(控件名)开头:

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

GUI_UC_EncodeGBK.c是设置emWin为GBK编码C文件: (2)设置emWin为GBK编码: (3)修改

emWin 2天速成实例教程000_如何快速入门ucGUI/emWin

标签:emWin教程emWin入门教程