在根据野火、正点原子、安富莱三家的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窗口管理器学习相关推荐

  1. STemWin入门实战学习

    从网上了解到嵌入式第三方GUI,emwin.ucGUI.STemWin,ST官方有GUI的应用,两天的初步了解,马上行动: 硬件:CPU:STM32F103C8 屏幕:OLED 128*64 驱动:S ...

  2. 超详细!!!STM32F407ZGT6HAL库移植STemwin(基于正点原子最小系统板+GUIBuilder)

    第一次写博客,我以为会是点灯的,没想到留给了GUI,但是第一次写,可能写的不够好欢迎大家批评指正. 最近由于比赛的要求,需要给自己的LCD设计GUI界面,在查了一些资料后,决定先学STemwin然后学 ...

  3. 关于参加“兆易创新杯”第十三届中国研究生电子设计竞赛,国赛二等奖的总结(fishing_5)

    前言   暑假快要过完了,研电赛也终于结束了,值此新旧学期交替之际,打算把比赛了有将近小半年的研电赛的过程简单地总结一下,人说有总结才能有进步嘛. 依稀记得正式开始准备比赛的时间是2018年4月18日 ...

  4. 正点原子嵌入式linux视频教程,正点原子嵌入式开发完整全套视频教程

    资源介绍 replyreload += ',' + 228881;[课程目录] 准备篇 第1讲 开发板开机测试 第2讲 开发板入门 第3讲 STM32学习方法+视频说明 第4讲 开发板资源描述 第5讲 ...

  5. STEMWIN窗口管理学习

    STEMWIN窗口管理学习 STEMWIN窗口管理学习 什么是窗口管理 窗口管理的一些理解 窗口管理一些API 窗口管理的结构体,消息列表 窗口重绘 一些窗口管理的例子 STEMWIN窗口管理学习 本 ...

  6. STemWin学习:关于窗口消息的基础知识

    刚开始接触emWin,记录一下我自己感悟的心得. 首先从GUIBuilder小工具创建的窗口文件讲解. // USER START (Optionally insert additional stat ...

  7. STemWin学习之路(一)

    一.什么是STemwin STemwin:是ST公司对emwin稍作修改,只能在ST的MCU上使用,并且是免费的,但是不开源,以lib的形式提供,在使用前一定要使用STM32的CRC时钟.ST官网:w ...

  8. STemWin学习笔记——窗口小工具(控件)

  9. Mono for Andriod学习与实践(1)— 初体验

    对于Andriod的开发者来说,相信Java语言是第一选择,可是对于.Net开发者来说,要想利用C#在Andriod平台上开发,Mono提供了相应的开发平台来实现,Mono for Andriod就是 ...

最新文章

  1. Django 框架13: 自定义过滤器和标签
  2. Investigating SQL Server 2008 Wait Events with XEVENTS
  3. 在linux中运行多文件,在Linux中打开了太多文件(Too many open files)的三种解决方法...
  4. Puppeteer保存html,PuppeteerSharp读取页面完整HTML(.NetCore)
  5. button点击事件不响应的解决方法(子视图大小超过父视图)
  6. Ubuntu安装wine和Wine QQ
  7. 一起谈.NET技术,走向ASP.NET架构设计——第二章:设计/ 测试/代码
  8. lnsist不是insist
  9. int[]是什么类型?
  10. 5月30日第壹简报,星期一,农历五月初一
  11. 串口服务器采集需要通讯协议么,C2000-A2-SDX6000-CX1
  12. Activiti工作流会签与获取下一节点任务信息
  13. lisp不是函授型语言_讨论:为什么Lisp语言不再被广泛使用
  14. 手机里html转成pdf,HTML转成pdf
  15. unity中计算向量的模长和归一化向量
  16. 通过STM32CUBEMX生成RTOS系统运用(一)
  17. Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains valu...
  18. VC2005 如何获取系统时间
  19. 想要开亚马逊需要多少费用?以下是具体明细
  20. 元学习与小样本学习 | (2) Few-shot Learning 综述

热门文章

  1. 工业级液压回路马达各类阀泵动静态测试,计算机智能数据采集分析处理
  2. performSelector系列方法的研究
  3. 零基础考研计算机专业难么,零基础跨考计算机考研难度大吗
  4. 如何破解wayos禁止二级路由
  5. 从另一种角度理解量子力学
  6. [脱壳破解]脱壳小结
  7. 磅磅通称重系统管理软件(★免费称重软件★)
  8. 【Java】设计模式之单例模式与工厂模式
  9. 如何确定去耦电容的大小?
  10. frontpage制作php,FrontPage 应用制作技巧四则