#2019.6.5
#EMWIN Learning… …
#1.GUI_Conf.c文件主要给EMWING分配内存
##(1)GUI_X_Config函数
1.获取内存大小
2.将内存分配给EMWIN
3.设置存储块的平均大小
NOTE:配置EMWIN功能时修改对应.h文件中的内容

#2.各种函数名及其各自的作用
##(1)GUI_DispString()
作用:文本显示
用法:GUI_DispString(“Hello world”)
NOTE:/r:回车 /n:换行
##(2)文本显示函数表

##(3)重点API函数介绍
1.GUI_SetTextMode()
作用:按照指定参数设置文本模式
原型:int GUI_SetTextMode(int TextMode)
参数TextMode:
1.正常文本:正常显示文本
2.反转文本:通常的黑底白字显示方式变为白底黑字显示。
3.透明文本:表示文本卸载屏幕上已知可见的内容之上。
4.异或文本:如果使用彩色,反相的像素计算公式:新像素颜色=颜色的值-实际像素颜色-1.
5.透明反转文本:GUI_TEXTMODE_TRANS|GUI_TEXTMODE_REV
2.GUI_SetTextAlign()
作用:为当前字符串输出设置文本对齐模式
原型:int GUI_SetTextAlign(int TextAlign)
参数TextAlign:水平对齐(左、中、右)和垂直对齐(上、中、下)可以用OR同时使用
3.GUI_Clear() 和 GUI_DispCEOL()
作用:GUI_Clear()用来清除当前窗口
GUI_DispCEOL()清除当前窗口从当前文本位置到行末
4.GUI_DispStringInRextWrap()
作用:在指定矩形区域内显示指定字符串。
原型:void GUI_DispStringInRextWrap(const char GUI_UNI_PTR *s,
GUI_RECT *pRect,
int TextAlign,
GUI_WRAPMODE WrapMode)
参数:1.s:显示的字符串
2.pRect:要写入的窗口矩形区域
3.TextAlign:水平和垂直对齐方式
4.WrapMode:(不执行自动换行、根据字执行自动换行、根据字节执行自动换行)
##(4)需要重点掌握函数
GUI_SetBkColor():设置背景颜色
GUI_SetFont():设置字体
GUI_SetColor():设置前景色(如文本,画线等颜色)
GUI_SetTextMode():设置文本显示模式
GUI_DispString():在指定位置显示字符串
GUI_DispStringHcenterAT():在指定位置水平居中显示字符串
GUI_DispStringInRectWrap():在指定的矩形区域中显示字符串,并可自动换行
#3.数字显示函数
##(1)数值显示API函数表

##(2)综合数字显示程序
GUI_DispStringAt(“GUI_DispDecAt():”,x,y);
GUI_DispDecAt(200,x+150,y,3); //显示数值200

 GUI_DispStringAt("GUI_DispFloat():",x,y+20);GUI_GotoXY(x+150,y+20);                    //移动光标GUI_DispFloat(49.35,5);                   //显示浮点数49.35,显示5位数GUI_DispString("   ");GUI_DispFloat(-0.345,6);               //显示浮点数-0.345,显示6位数GUI_DispStringAt("GUI_DispBinAt():",x,y+40);GUI_DispBinAt(8,x+150,y+40,4);               //显示十进制数8的二进制值GUI_DispStringAt("GUI_DispHex():",x,y+60); GUI_GotoXY(x+150,y+60);                   //移动光标GUI_DispHex(100,3);                       //显示十进制数100的十六进制值,显示3位GUI_DispStringAt("GUI_DispHexAt():",x,y+80);GUI_DispHexAt(0x22,x+150,y+80,3);     //在指定位置显示16进制0x22的十六进制值GUI_DispStringAt("GUI_GetVersionString():",x,y+100);emwinversion = (char*)GUI_GetVersionString();    //获取当前emwin版本号GUI_DispStringAt(emwinversion,x+200,y+100);     //显示版本号

#4.2D绘图
##(1)基本绘制函数表

##(2)Alpha混色API函数表

##(3)绘制线条API函数表

##(4)其他图形绘制API函数表

#5.显示位图
##(1)位图绘制API简介
1.GUI_DrawBitmap()
作用:将图片生成的位图c文件绘制出来。
原型:void GUI_DrawBitmap(const GUI_BITMAP *pBM,
int x,
int y)
参数作用:pBM:指向显示的位图
x:显示器中位图左上角x的位置
y:显示器中位图左上角y的位置
2.GUI_DrawBitmapEX()
作用:在显示器中缩放或镜像位图
原型:void GUI_DrawBitmapEX(const GUI_BITMAP *pBM,
int x, int y,
int xCenter, int yCenter,
int xMag, int yMag)
参数作用:pBM:指向显示的位图
x:显示器中定位点x的位置
y:显示器中定位点y的位置
xCenter:位图中定位点x的位置
yCenter:位图中定位点y的位置
xMag:x方向的比例因子
yMag:y方向的比例因子
NOTE:位图信息都是用GUI_BITMAP结构体定义的,使用位图转换器生成的c文件最终将图片信息放到结构体当中,包括图片的数据、尺寸、调色板信息等等
#6.颜色条绘制
##(1)emwin预定义颜色表

##(2)emwin内置调色板表

##(3)颜色API函数表

#7.存储设备
##(1)优缺点比较
如果不使用存储设备,则可以看到一步步的绘制操作效果,缺点是会出现显示器闪烁。使用存储设备是,一次可见到所有历程的效果,就像单次操作一样,不能实际看见中间步骤。综上所述,使用存储设备的优点是完全消除了显示器的闪烁,这也是通常所期望的
##(2)存储函数基本API函数表

##(3)重要函数简介
1.GUI_MEMDEV_Clear()
作用:将存储设备的整个内容标志位“未更改”
原型:void GUI_MEMDEV_Clear(GUI_MEMDEV_Handle hMem);
参数:hMem:存储设备的句柄(没看懂什么意思)
2.GUI_MEMDEV_CopyToLCD()
作用:将存储设备的内容从内存复制到LCD
原型:void GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem);
参数:hMem:存储设备的句柄(同上)
NOTE:请勿在窗口管理器调用的着色回调函数中使用此函数,因为它将进制窗口管理器的裁剪区域,应使用函数GUI_MEMDEV_WriteAt代替
3.GUI_MEMDEV_CopyToLCDAt()
作用:将存储设备的内容从内存复制到LCD的指定位置
原型:void GUI_MEMDEV_CopyToLCDAt(GUI_MEMDEV_Handle hMem, int x, int y)
参数:hMem:存储设备的句柄
x:x方向位置
y:y方向位置
4.GUI_MEMDEV_Create()(使用说明出现错误,未介绍此部分)
5.GUI_MEMDEV_Delete()(同1)
6.GUI_MEMDEV_Select()(同1)
##(4)存储设备演示历程(参考)
hMem = GUI_MEMDEV_Create(Rect.x0, Rect.y0, Rect.x1 - Rect.x0, Rect.y1 - Rect.y0); //创建存储设备
GUI_MEMDEV_Select(hMem); //选择hMem作为绘制操作目标的存储设备
_Draw(0); //执行要显示的内容复制到存储设备中
GUI_MEMDEV_Select(0); //选中LCD
while (1)
{
for (i = 0; i < 3; i++)
{
GUI_Delay(250);
GUI_ClearRect(LCD_GetXSize() - Rect.x1, Rect.y0, LCD_GetXSize(), Rect.y1); //清除选中的屏幕
GUI_Delay(250);
GUI_MEMDEV_CopyToLCDAt(hMem, LCD_GetXSize() - Rect.x1, Rect.y0); //将存储设备的内容从内存复制到LCD指定位置
}
GUI_Delay(500);

 //未使用存储设备_Draw(400);GUI_Delay(400);GUI_ClearRect(0, 150, 799, 210);

##(5)分段存储设备(常用)
由于有时候没有用于一次性存储整个输出区域的内存可用,此时分段存储设备就派上用场,分段存储设备将绘制区域分成多段,每段包含当前可用内存可包含的最多行。
1.GUI_MEMDEV_Draw()
作用:基本绘制函数,防止显示器闪烁。
原型:int GUI_MEMDEV_Draw(GUI_RECT *pRect,
GUI_CALLBACK_VOID_P *pfDraw,
void * pData,
int NumLines,
int Flags)
参数:pRect:所使用LCD区域的GUI_RECT结构的指针
pfDraw:执行绘制的回调函数的指针
pData:用作回调函数参数的数据结构的指针
NumLines:0(推荐)或存储设备的行数
Flags:GUI_MEMDEV_HASTRANS:默认:使用透明性标志创建存储设备,该标记确保正确绘制背景
GUI_MEMDEV_NOTRANS:创建存储设备,无透明性。用户确保正确绘制背景,仅应用于优化目的。
##(6)自动设备对象
自动设备对象以分段存储设备为基础,对于一次仅更新显示器一小部分的应用而言可能更高效。该设备会自动识别包含固定对象的显示器区域,以及包含必须更新的移动或更改对象的区域。第一次调用绘制函数时,会绘制所有项目,每一次后续调用都将仅更新移动或更改对象使用的空间,实际绘制操作使用分段存储设备,但仅限在必要空间内。使用自动设备对象的主要优势(相对于使用分段存储设备而言)是计算时间减少,因为它不始终更新整个显示器

1.GUI_MEMDEV_CreateAuto():创建自动设备对象
2.GUI_MEMDEV_DeleteAuto():删除自动设备对象
3.GUI_MEMDEV_DrawAuto():使用原型:int GUI_MEMDEV_DrawAuto(GUI_AUTODEV *pAutoDev,GUI_AUTODEV_INFO  *pAutoDevInfo,GUI_CALLBACK_VOID_P   *pfDraw,void    *pData)参数:pAutoDev:GUI_AUTODEV对象的指针pAutoDevInfo:GUI_AUTODEV_INFO对象的指针pfDraw:要执行的用户定义绘制函数的指针pData:传输给绘制函数的数据结构的指针

#8窗口管理器(重要!!!字数太多仅写较重要部分)
##(1)窗口术语说明
###1.优点
是矩形的。
具有Z位置。
可以隐藏或显示
可具有有效和无效区域
可以透明或不透明
###2.活动窗口
当前正用于绘制操作的窗口成为活动窗口,不一定就是最上面的窗口。
###3.回调例程
回调例程由用户程序定义,指示在特定事件出现时图形系统调用特定的函数,他们通常用于在窗口内容更改时自动重绘窗口
###4.子窗口、父窗口,同属窗口
子窗口时相对于其他窗口(成为父窗口)定义的。只要父窗口移动,其子窗口就会相应移动。子窗口始终完全包含在其父窗口中,必要时会被裁剪。具有相同父窗口的多个子窗口被视为“同属”窗口。
###5.句柄
创建新窗口后,WM会分配一个成为句柄的唯一标识符。句柄用于在该特定窗口中执行其他任何操作。
##(2)窗口回调机制
大多数情况下最好使用回调
###1.不使用回调渲染
回调例程不是必须使用的,但是如果这么做,WM会失去管理窗口重绘(更新)的能力,也可能混合使用。
###2.使用回调渲染
1.回调函数原型:void callback(WM_MESSAGE *pMsg)
参数:pMsg:指向类型WM_MESSAGE的数据结构指针
2.WM_PAINT消息
窗口收到WM_PAINT消息时,应重绘自身。
注意:处理WM_PAINT时,不得执行某些操作
处理WM_PAINT消息时,回调例程除了重绘窗口的内容外,不得执行其他操作。更改窗口属性的其他任何函数也不能调用。
###3.窗口管理器API函数表

还有很多…
###4.窗口回调函数的使用过程讲解
1.初始化窗口期间,会创建一个包含整个lcd区域的窗口作为背景窗口,这个窗口的句柄为WM_HBWIN,函数_cbBkWindow()就是这个背景窗口的回调函数。
2.WM_HBWIN消息,实现重绘背景窗口,这里支持清屏操作。
3.新建窗口的回调函数。
4.调用函数WM_Creatwindow()闯进一个窗口hWnd,窗口的回调函数为函数_cbWindow(),窗口属性为可见的。
5.移动窗口,每次x,y分别移动2个像素。
6.删除窗口hWnd。
7.使用背景窗口WM_HBWIN无效,这样下一次调用GUI_Exce()函数的时候就会重绘背景窗口WM_HBWIN。
8.调用GUI_Exce()函数重绘所有无效窗口。
9.移动窗口hWnd,注意此时背景窗口WM_HBWIN并没有设置回调函数,因此会看到当hWnd移动的时候会有拖影。
10.调用函数WM_SetCallback()为背景窗口设置回调函数_cbBkWindow(),这样移动窗口hWND的时候就会调用_cbBkWindow()重绘背景函数,这样就看不到拖影了。
###5.窗口管理API函数的使用
很多窗口管理函数的介绍与应用。太多了,写出来浪费时间。看看就够了。

20190605学习日记相关推荐

  1. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

  2. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

  3. GPU(CUDA)学习日记(十三)------ CUDA内存简介

    GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...

  4. GPU(CUDA)学习日记(九)------ CUDA存储器模型

    GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...

  5. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  6. SpringMVC学习日记 1.Spring框架

    SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...

  7. 微信开发学习日记(一):快速阅读5本书,掌握整体背景

    2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的.       ...

  8. const 指针_C语言学习日记(11)——const与指针

    对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...

  9. 十五的学习日记20160926-你不知道的JS笔记/

    十五的学习日记20160926 JavaScript 一个用于检测正负值的函数,可以用它辨别-0值. 我觉得挺好用,以后可以写到自己的工具库里. //函数:检查传入参数是否为正数.Number=> ...

最新文章

  1. linux c va_list 32位和64位的差异
  2. 学习 Spring (十三) AOP 配置
  3. jmeter生成html报告修改,jmeter:测试后生成html报告
  4. python培训学习方法_python编程学习方法及技术进阶建议
  5. 读取csv文件 java_Java:逐步读取/流式传输CSV文件
  6. 头部外伤指什么_什么是颅骨缺损?
  7. [转载] java排序compareTo:降序输出学生成绩
  8. 机器学习中的数学(二)--梯度下降法
  9. php是啥_php是什么
  10. 斯坦福吴恩达团队公布最大医学影像数据集
  11. uniapp微信小程序获取位置(高德SDK)
  12. Mysql 自动增长 重置
  13. linux下一个网卡配置多个ip【虚拟ip】
  14. 黑苹果Mojave下驱动高通模块Atheros DHXA-195(AR9285无线网卡和AR3011 蓝牙3.0)
  15. 平面上两条直线的夹角
  16. html 获取浏览器宽高,js获取浏览器高度与宽度的方法
  17. 【EmmyLua插件】Rider无法跳转lua文件解决
  18. H3C交换机IPv6无状态地址自动配置
  19. html5怎么播放3gp,写了个html5播放视频的video控件,只支持mp4和3gp(android和ios默认支持的格式就写了这个)...
  20. 4.Java数组(一)

热门文章

  1. 计算机科学与技术有剪辑吗,计算机科学与技术学院第七届“微剪辑大赛”
  2. 通过宏函数计算结构体成员偏移量
  3. 新手如何Reverces(基础ctf教程篇)
  4. js html显示emoji表情,canvas绘制一个常用的emoji表情
  5. 惊!西游记内幕竟是这样的。
  6. 青龙面板之白嫖游戏云
  7. 阐述商务礼仪的重要性
  8. 关于NFT的版权的保护认证
  9. 烤仔建工承建,著名画家孙天骄的元宇宙美术馆即将开门迎客
  10. Date入参和出参格式_@DateTimeFormat 和 @JsonFormat 注解