STemWin窗口管理器学习
在根据野火、正点原子、安富莱三家的emWin文档进行学习,关于窗口管理器的内容复杂又难以学会,因此需要使用笔记帮助分析;
一、什么是窗口管理器?
1、窗口管理器:Windows Manage。是emWin中非常重要的一部分,正如其名字的含义一样,可以对所有的窗口进行管理,有创建窗口(WM_CreateWindow)、移动窗口(WM_MoveWindow)、给窗口发送消息(WM_SendMessage)等非常多的功能;
2、窗口管理器与GUI函数方式创建的矩形有什么区别呢?
窗口是一个复杂的结构体,有起点坐标、长宽像素数值、透明度、回调函数、有效区域与无效区域、Z轴高度等结构体元素组成。为了实现绚丽的显示效果,如多个窗口层叠显示、多部件显示、透明显示等效果,窗口必须要有这些复杂的属性才可能实现。
GUI函数方式创建的矩形就是最基础的一个矩形,是基础,但很难实现绚丽的显示效果和复杂的操作逻辑。
二、根据STemWin仿真样例代码分析窗口管理器
1、回调函数、窗口、窗口管理器之间的关系:用户通过WM开头的窗口管理器函数API接口对窗口进行操作,在这个过程中,会发送消息给窗口;窗口内部会由回调函数对消息进行判断,并执行用户编写好的代码;
2、窗口管理器会发送哪些消息呢?
野火、正点原子、安富莱三家的emWin文档中均详细描述了四类消息代码;其中用户自定义的消息代码也经常使用。
3、回调函数如何做到重绘窗口?
static void _cbWindow(WM_MESSAGE* pMsg) {GUI_RECT Rect; //回调函数基本都有定义一个矩形类型的成员变量Rect,用于重绘switch (pMsg->MsgId) { //判断Message信息中消息是哪一个?case WM_PAINT: //当为重绘消息时WM_GetInsideRect(&Rect); //获取窗口内部矩形并赋值给Rect成员变量GUI_SetBkColor(GUI_RED); //设置背景颜色、前景颜色GUI_SetColor(GUI_YELLOW);GUI_ClearRectEx(&Rect); //清屏GUI_DrawRectEx(&Rect); //画矩形边缘直线GUI_SetColor(GUI_BLACK); //设置显示文字GUI_SetFont(&GUI_Font8x16);GUI_DispStringHCenterAt("Foreground window", 75, 40);break;default:WM_DefaultProc(pMsg); //默认消息处理函数}
}
如上部分代码所示,首先会获取该回调函数的窗口坐标并赋值给Rect矩形变量,然后执行矩形的背景颜色、前景颜色绘制、文字显示。
4、手动调用窗口管理器发送消息给窗口
static void _ChangeInfoText(char * pStr) {WM_MESSAGE Message; //定义一个窗口管理器消息类型的成员变量Message.MsgId = MSG_CHANGE_TEXT; //设置消息,MSG_CHANGE_TEXT是用户宏定义的消息Message.Data.p = pStr; //将文本的指针复制给消息的数据指针WM_SendMessage(WM_HBKWIN, &Message); //调用消息管理器发送消息给背景窗口WM_InvalidateWindow(WM_HBKWIN); //无效化背景窗口,后续在调用程序中调用延时函数就可以进行背景窗口重绘
}
一个非常好用的函数,用户可以控制什么时候发送消息、发送的消息类型。
STemWin窗口管理器学习相关推荐
- STemWin入门实战学习
从网上了解到嵌入式第三方GUI,emwin.ucGUI.STemWin,ST官方有GUI的应用,两天的初步了解,马上行动: 硬件:CPU:STM32F103C8 屏幕:OLED 128*64 驱动:S ...
- 超详细!!!STM32F407ZGT6HAL库移植STemwin(基于正点原子最小系统板+GUIBuilder)
第一次写博客,我以为会是点灯的,没想到留给了GUI,但是第一次写,可能写的不够好欢迎大家批评指正. 最近由于比赛的要求,需要给自己的LCD设计GUI界面,在查了一些资料后,决定先学STemwin然后学 ...
- 关于参加“兆易创新杯”第十三届中国研究生电子设计竞赛,国赛二等奖的总结(fishing_5)
前言 暑假快要过完了,研电赛也终于结束了,值此新旧学期交替之际,打算把比赛了有将近小半年的研电赛的过程简单地总结一下,人说有总结才能有进步嘛. 依稀记得正式开始准备比赛的时间是2018年4月18日 ...
- 正点原子嵌入式linux视频教程,正点原子嵌入式开发完整全套视频教程
资源介绍 replyreload += ',' + 228881;[课程目录] 准备篇 第1讲 开发板开机测试 第2讲 开发板入门 第3讲 STM32学习方法+视频说明 第4讲 开发板资源描述 第5讲 ...
- STEMWIN窗口管理学习
STEMWIN窗口管理学习 STEMWIN窗口管理学习 什么是窗口管理 窗口管理的一些理解 窗口管理一些API 窗口管理的结构体,消息列表 窗口重绘 一些窗口管理的例子 STEMWIN窗口管理学习 本 ...
- STemWin学习:关于窗口消息的基础知识
刚开始接触emWin,记录一下我自己感悟的心得. 首先从GUIBuilder小工具创建的窗口文件讲解. // USER START (Optionally insert additional stat ...
- STemWin学习之路(一)
一.什么是STemwin STemwin:是ST公司对emwin稍作修改,只能在ST的MCU上使用,并且是免费的,但是不开源,以lib的形式提供,在使用前一定要使用STM32的CRC时钟.ST官网:w ...
- STemWin学习笔记——窗口小工具(控件)
- Mono for Andriod学习与实践(1)— 初体验
对于Andriod的开发者来说,相信Java语言是第一选择,可是对于.Net开发者来说,要想利用C#在Andriod平台上开发,Mono提供了相应的开发平台来实现,Mono for Andriod就是 ...
最新文章
- Django 框架13: 自定义过滤器和标签
- Investigating SQL Server 2008 Wait Events with XEVENTS
- 在linux中运行多文件,在Linux中打开了太多文件(Too many open files)的三种解决方法...
- Puppeteer保存html,PuppeteerSharp读取页面完整HTML(.NetCore)
- button点击事件不响应的解决方法(子视图大小超过父视图)
- Ubuntu安装wine和Wine QQ
- 一起谈.NET技术,走向ASP.NET架构设计——第二章:设计/ 测试/代码
- lnsist不是insist
- int[]是什么类型?
- 5月30日第壹简报,星期一,农历五月初一
- 串口服务器采集需要通讯协议么,C2000-A2-SDX6000-CX1
- Activiti工作流会签与获取下一节点任务信息
- lisp不是函授型语言_讨论:为什么Lisp语言不再被广泛使用
- 手机里html转成pdf,HTML转成pdf
- unity中计算向量的模长和归一化向量
- 通过STM32CUBEMX生成RTOS系统运用(一)
- Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains valu...
- VC2005 如何获取系统时间
- 想要开亚马逊需要多少费用?以下是具体明细
- 元学习与小样本学习 | (2) Few-shot Learning 综述