EMWIN

文章目录

  • EMWIN
  • 前言
  • 一、小工具基础知识
  • 二、 如何使用小工具
    • 1.重绘机制
    • 2.小工具的使用
  • 三、通用控件 API 函数
    • 1.用于控件的 WM 函数
    • 2.常用 API 函数
    • 3._CreateIndirect()

前言

小工具是具有对象类型属性的各种窗口,在窗口界被称为控件,是组成用户界面的元素。它们可自动对某些事件作出反应,例如,按下某按钮后,它可以不同状态显示。小工具需要创建,具有可在存续期间随时更改的属性,并通常在不再需要时被删除。正如窗口一样,小工具通过其创建函数返回的句柄进行引用,小工具要求使用窗口管理器,小工具创建后,可像其他任何窗口一样处理它。 WM 确保了在必要时随时正确显示(并重绘)它,小工具不是编写应用程序或用户界面所必需的,但它们可大大简化编程

一、小工具基础知识




二、 如何使用小工具

1.重绘机制

小工具根据其属性绘制自身,此操作在调用 WM_Exec() 、 GUI_Exec() 或 GUI_Delay() 时执行。在多任务环境中,通常由后台任务来调用 WM_Exec() 并更新小工具(以及所有其他具有回调函数的窗口)。小工具的属性更改后,该小工具的窗口 (或部分窗口)会被标记为无效,但不会立即重绘,因此,代码段的执行速度会非常快。重绘由 WM 在稍后执行,或者通过为该小工具调用 WM_Paint() 强制执行 (或直到重绘所有窗口时调用 WM_Exec() )。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.小工具的使用

假设我们要显示一个进度条,所需的只是以下代码:

PROGBAR_Handle hProgBar; (1)
GUI_DispStringAt("Progress bar", 100, 20);
hProgBar = PROGBAR_Create(100, 40, 100, 20, WM_CF_SHOW); (2)

(1)、定义一个进度条句柄。
(2)、调用 PROGBAR_Create()函数创建一个进度条,创建完成以后窗口管理器会在调用单WM_Exec() 时自动绘制此小工具。每种类型的小工具都有若干能够修改其外观的成员函数,小工具创建后,可通过调用其成员函数之一更改其属性,这些函数使用小工具的句柄作为第一个自变量。要使上述创建的进度条显示 45% 并将条颜色从默认设置 (深灰 / 浅灰)更改为绿色 / 红色,可使用以下代码段:

PROGBAR_SetBarColor(hProgBar, 0, GUI_GREEN);
PROGBAR_SetBarColor(hProgBar, 1, GUI_RED);
PROGBAR_SetValue(hProgBar, 45);


默认配置
所有小工具都还具有一个或多个配置宏,它们定义各种默认设置(如所使用的字体和颜色)。

小工具如何通信
小工具通常作为子窗口创建,父窗口可为任何窗口类型,甚至是另一种小工具,为了确保同步,无论何时父窗口的任何子项有任何事件发生,通常都应通知父窗口。有事件发生时,子窗口小工具通过发送 WM_NOTIFY_PARENT 消息与其父窗口通信,作为消息一部分发送的通知代码取决于事件。大多数小工具都有定义不同类型事件的一个或多个通知代码
皮肤设置
小工具的外观可使用其各自的成员函数进行修改,其中一些支持皮肤设置。如果对某小工具使用了皮肤设置,则 “皮肤”将决定该小工具的外观,且一些成员函数将失效。
小工具的动态内存使用
在嵌入式应用中,由于分裂效应,通常都不太希望使用动态内存,可使用许多不同策略来避免此情况,但只要内存区域被应用程序中的指针引用,这些策略的使用都有局限性。因此,emWin 使用不同的方法:所有对象(以及运行时存储的所有数据)都存储在被句柄引用的内存区域中。这使它能够在运行时重新分配已分配的内存区域,因此避免了使用指针时会发生的长期分配问题。所以所有小工具都使用句柄引用。

三、通用控件 API 函数

1.用于控件的 WM 函数

由于小工具本质上就是窗口,所以它们与任何窗口管理器 API 例程都兼容。小工具的句柄用作 hWin 参数,且小工具的处理方式与其他任何窗口都相同。

WM_DeleteWindow() 删除窗口。
WM_DisableMemdev() 禁止使用存储设备进行重绘。
WM_EnableMemdev() 启用存储设备用于重绘。
WM_InvalidateWindow() 使窗口无效。
WM_Paint() 立即绘制或重绘窗口。

2.常用 API 函数

<WIDGET>_Callback() 默认回调函数。
<WIDGET>_CreateIndirect() 用于对话框中的自动创建。
<WIDGET>_CreateUser() 使用额外字节作为用户数据创建小工具。
<WIDGET>_GetUserData() 检索用<WIDGET>_SetUserData 设置的数据。
<WIDGET>_SetUserData() 设置小工具的额外数据。
WIDGET_GetDefaultEffect() 返回用于小工具的默认效果。
WIDGET_SetDefaultEffect() 设置用于小工具的默认效果。
WIDGET_SetEffect() 设置用于给定小工具的效果。

表示的是小工具的名称,其中函数_CreateIndirect()尤为重要,因为在使用对话框的时候就是使用的这个函数来创建各个小工具的。

3._CreateIndirect()

描述
创建要在对话框中使用的小工具。
函数原型

<WIDGET>_Handle <WIDGET>_CreateIndirect(
const GUI_WIDGET_CREATE_INFO * pCreateInfo,
WM_HWIN hParent,
int x0,
int y0,
WM_CALLBACK * cb);

其他信息
任何小工具都可使用适宜的前缀间接创建。例如:BUTTON_CreateIndirect() 可间接创建一个按钮小工具,CHECKBOX_CreateIndirect() 可间接创建一个复选框小工具,等等。仅在小工具要被包含在对话框中时,才需要间接创建它,否则可使用 _Create() 函数直接创建它。

STM32——EMWIN窗口小工具(十三)相关推荐

  1. uniapp 窗口小工具、桌面小部件、微件 Ba-AppWidget

    简介(下载地址) Ba-AppWidget 是一款窗口小工具(桌面小部件.微件)插件,默认为音乐播放器的样式,有其他界面需要,可联系作者定制. 支持点击事件监听 支持动态更改页面内容 支持设置小工具的 ...

  2. uniapp 窗口小工具、桌面小部件、微件(日历、时间) Ba-AwCalendarS

    简介(下载地址) Ba-AwCalendarS 是一款窗口小工具(桌面小部件.微件)插件,默认为简单的时间样式,有其他界面需要,可联系作者定制. 支持定时更新(本插件为每分钟) 支持点击事件监听 支持 ...

  3. STM32——EMWIN窗口管理(九)

    EMWIN 文章目录 EMWIN 前言 一.窗口术语 二.窗口回调机制 1.不使用回调渲染 2.使用回调渲染 3.背景窗口重绘和回调 4.无效化 三.消息 1.消息结构 2.消息类型 总结 前言 窗口 ...

  4. 推荐:固定窗口小工具(PC端)——Deskpins

    目录 1.前言 使用场景: 使用电脑工作学习时,打开多个窗口后,切换窗口时,是否希望某个窗口一直固定在最上方? 2.获取 3.使用 4.优缺点 1.前言 使用场景: 使用电脑工作学习时,打开多个窗口后 ...

  5. Android开发实用小工具十三——BMI指数计算工具

    文章目录 前言 一.效果展示 二.代码 1.准备工作 2.样式布局 3."BMI指数计算"活动页面 4."BMI计算结果"活动页面 总结 前言 BMI指数计算工 ...

  6. java dos窗口小工具下载,maxdos 9 3-maxdos工具箱 v9.3 官方版

    maxdos 9 3 maxdos工具箱是一个dos工具箱,maxdos工具箱为安装好的电脑系统加入dos,方便用户维护与备份还原,是完全傻瓜化的工作模式,更是可以直接启动硬盘上的光盘ISO镜像一键启 ...

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

  8. 手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考

    为了方便手机操作,一些小伙伴会在手机桌面上添加天气.一键锁屏.日历等窗口小工具,那么问题来了!荣耀9X这款新手机是如何添加窗口小工具呢?官维君今天就来给大家讲解一下方法. 标准姿势看这里-- 第一步: ...

  9. 电脑桌面便签小工具_电脑桌面工作任务提醒软件有哪些?多端同步提醒办公软件试试云便签...

    有的人总是说自己的工作效率不够高,但是你问他平时都是怎么工作的,他也说不出个一二三来,只是说想起什么工作就去什么,这样毫无时间观念.对工作任务也没有整体认知的工作方式,工作效率当然不会高.甚至有时候快 ...

最新文章

  1. echarts 点亮中国插件研究
  2. mysql linux32_Linux 配置 mysql 5.7.32 实操记录
  3. 使用NSURLProtocol实现UIWebView的离线缓存
  4. CMSSDK功能介绍和关联用户系统
  5. RabbitMQ 线上事故!慌的一批,脑袋一片空白……
  6. Server-Side Timestamping in the Audit Trail System (XAF时间戳在审核中的应用代码)
  7. cdr怎么算曲线周长_cdr怎么计算图形的周长和面积? cdr图形计算长度和面积的技巧...
  8. 记2021春季PAT乙级考试题解
  9. windows 全系列电脑加速,告别电脑“卡”的时代
  10. 给技术经理找了几款Docker开源镜像仓库,为什么经理选中了Sonatype Nexus(下)
  11. oracle Net manger配置网络服务
  12. (净化anaconda)conda install 中途打断出现ERROR REPORT
  13. 5g nr,PDSCH/PUSCH,UE如何选择MCS table
  14. 宏基Acer4710系列宝石本白屏闪屏等屏幕疑难杂症
  15. 用TTreeview实现的一个通讯录的组别设置,
  16. 计算机二级试题word,计算机二级word试题
  17. FPGA中LUT初步学习
  18. 服务器应该租用哪家好?如何选择适合自己的服务器?
  19. 戴尔微型计算机进bois,dell进bios按什么键 戴尔进bios的方法
  20. 已拦截跨源请求:同源策略禁止读取位于...的远程资源。(原因:CORS 请求未能成功)。

热门文章

  1. 云计算入门以及Eucalyptus简介
  2. 抢拍php并发处理,【活动预告】积分“大米”抢拍新一轮又要开始啦!
  3. 微信小程序 css样式自制表格
  4. 明解C语言入门篇练习题第十章
  5. maven 通过打包命令指定不同环境配置文件
  6. OpenCV 函数官网
  7. C语言之格式化输出字符
  8. 初识蓝牙JDY-08(修订2)
  9. APPDynamics APM性能监控软件
  10. 互联网产品都是怎么做推广的?(app产品推广)