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. JDBC数据源连接池(1)---DBCP
  2. java期_java日期 时间
  3. js this pointer 指针
  4. URI和URL的区别(12万访问量)
  5. Canada Cup 2016 C. Hidden Word 字符串构造
  6. 从头基于空镜像scratch创建一个新的Docker镜像
  7. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
  8. 最新口绑查询HTML源码
  9. 视觉SLAM笔记(65) 简约总结
  10. indesign教程,了解基本文本格式
  11. 记事本写的python怎么运行_Python小白常见难题 如何运行Python
  12. 两个字节合并成一个16位short类型
  13. groovy简单介绍
  14. 一本通1375:骑马修栅栏(fence)
  15. 局部二值模式LBP的详细理解
  16. 第九章:MATLAB:程序设计(一)M文件
  17. mac版vpn连接错误解决
  18. C#实现office文档转换为PDF格式
  19. 3W黄金圈法则:一种思考方式 or 一种学习方法
  20. CAD制图初学入门之CAD图纸集的使用技巧

热门文章

  1. maven打包成jar文件与打包成tar.gz文件
  2. 2021-10-22 mysql数据库
  3. Maxwell简介使用
  4. Matlab2017a安装教程
  5. 常见厂家贴片电容电感电阻命名规则
  6. RoboWare安装教程
  7. C语言学习之路--C语言中的格式输出
  8. VC++6.0遇到“error spawning cl.exe”的解决办法
  9. 3.1-3.3 FEMA
  10. Java基础1----java介绍