提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

初学emwin记录一些在学习过程中的认识及理解对GUI_CreateDialogBox()函数认识及理解。


参考资料:
正点原子论坛: http://www.openedv.com/forum.php
安富莱电子论坛: https://www.armbbs.cn/forum.php?gid=1
野火电子论坛: https://www.firebbs.cn/
使用硬件平台:正点原子阿波罗开发板 h743

1.函数介绍

函数原形 :WM_HWIN GUI_CreateDialogBox (const GUI_WIDGET_CREATE_INFO * paWidget, int NumWidgets, WM_CALLBACK * cb, WM_HWIN hParent, int x0, int y0);
该函数在创建时需要6个参数,这些参数是需要我们按照规定的结构进行添加的,

函数返回类型: WM_HWIN

函数名: GUI_CreateDialogBox

参数1: const GUI_WIDGET_CREATE_INFO * paWidget —//定义对话框中所要包含的小工具的资源表的指针。
参数2: int NumWidgets---------------------------//对话框中所包含的小工具的总数。
参数3: WM_CALLBACK * cb--------------------//应用程序特定回调函数(对话框过程函数)的指针
参数4: WM_HWIN hParent-----------------------//父窗口的句柄(О表示没有父窗口)。
参数5: int x0------------------------------------------//对话框相对于父窗口的×轴位置
参数6: int y0-----------------------------------------//对话框相对于父窗口的丫轴位置.

2.返回类型

函数类型定义如下,经过层层追踪,最后确定为一个有符号长整型

  // WM_HWIN的定义路径如下1. #define    WM_HWIN      GUI_HWIN     2. typedef     GUI_HMEM     GUI_HWIN;3. #define     GUI_HMEM     I324. #define    I32          signed long

3. 函数名

1.函数的功能为 创建非阻塞式对话框。

参数1----------------资源表

//对话框资源列表 示例
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0,   0, 480,     272, 0, 0x0, 0 },{ BUTTON_CreateIndirect, "模式1", ID_BUTTON_0, 15, 10, 80, 180, 0, 0x0, 0 },{ BUTTON_CreateIndirect, "效果1", ID_BUTTON_1, 100, 10, 80, 89, 0, 0x0, 0 },{ BUTTON_CreateIndirect, "功率1", ID_BUTTON_2, 100, 103, 80, 89, 0, 0x0, 0 },
};

资源表是一个结构体数组,包含有函数指针和整形的成员,成员类型如下 类型可以如下查找

首先找到 定义类型

typedef struct   GUI_WIDGET_CREATE_INFO_struct   GUI_WIDGET_CREATE_INFO;

然后跳入GUI_WIDGET_CREATE_INFO_struct结构体 就可以看到成员的类型了。

struct GUI_WIDGET_CREATE_INFO_struct {GUI_WIDGET_CREATE_FUNC * pfCreateIndirect;const char             * pName;            //创建函数 //文本…不是所有小部件都使用I16                      Id;               //ID…在对话框中应该是唯一的 I16                      x0;               //x position  I16                      y0;               // y positionI16                      xSize;            // x sizeI16                      ySize;            // y sizeU16                      Flags;            //y size //小部件特定的创建标志(opt.) I32                      Para;             //小部件特定参数(opt.)   U32                      NumExtraBytes;    // 可用的额外字节数<WIDGET>_SetUserData & <WIDGET>_GetUserData
};

资源表中的第1个成员是一个函数指针,一般是根据需求选择相应的函数名。创建窗口时会将函数所在地址传递给一个指针。

资源表中的 第2个成员 Id是需要我们自己定义的 从GUI_ID_USER 开始向后加一个数进行偏移,每个ID值不能重复,用户的ID是从0x800开始的 在文件中有以下定义。
#define GUI_ID_USER 0x800

#define GUI_ID_USER       0x800

我们使用时在GUI_ID_USER后面加上一个数,以此来防止ID重复。

#define ID_BUTTON_0  (GUI_ID_USER + 30)         //模式1
#define ID_BUTTON_1     (GUI_ID_USER + 31)         //效果1
#define ID_BUTTON_2     (GUI_ID_USER + 32)         //功率1
#define ID_BUTTON_3     (GUI_ID_USER + 33)         //模式2
#define ID_BUTTON_4     (GUI_ID_USER + 34)         //效果2
#define ID_BUTTON_5     (GUI_ID_USER + 35)         //功率2

资源表中的 第3和第4 成员的值决定了窗口的起始位置。
资源表中的 第5和第6 成员的值决定了窗口长和宽的大小。

资源表创建好以后,我们会将这个结构体数组当成一个参数 传递给创建对话框的函数。之后也还会将回调函数当成一个参数传递给创建对话框的函数。

参数3------------对话框回调函数

回调函数是根据消息的类型来执行相应的操作 。

//对话框窗口回调函数    不是用来创建对话框里面的小工具,而是用来初始化小工具里面的参数的  小工具的创建在之前已经完成了
static void _cbDialog(WM_MESSAGE * pMsg)
{WM_HWIN hItem;int     NCode;int     Id;switch (pMsg->MsgId) {      //通过消息的类型来执行相应的操作case WM_INIT_DIALOG:            //创建对话框后立即发送到对话框窗口。……break;case WM_NOTIFY_PARENT:       //告知父窗口,其子窗口中发生了某些改变。……break;    ……  ……                                  default:WM_DefaultProc(pMsg);break;

什么情况下会调用回调函数?

  1. 创建对话框后会调用回调函数进行初始化。 此时的 pMsg->MsgId的值为 WM_INIT_DIALOG
  2. 当屏幕有触摸信息时会调用回调函数。 此时的 pMsg->MsgId的值为 WM_NOTIFY_PARENT
  3. 定时器定时时间到以后会调用回调函数。 此时的 pMsg->MsgId的值为 WM_TIMER
  4. ……

调用的过程是什么样的?以处理按钮消息为例,当按钮按下会调用回调函数,在回调函数中会进行确定外界执行了什么动作。

  1. 首先是确定消息的类型:消息的类型分为三类 分别是系统定义的消息类型、指针输入设备(PID)消息类型、通知代码类型。
  2. 确定产生消息的原窗口。
  3. 根据原窗口消息中的数据值执行相应动作。

总结

以上内容是在学习中的一些浅薄的理解和认识 难免会产生一些理解上和认识上的错误。

对 emwin 窗口创建的认识相关推荐

  1. STM32——EMWIN窗口小工具(十三)

    EMWIN 文章目录 EMWIN 前言 一.小工具基础知识 二. 如何使用小工具 1.重绘机制 2.小工具的使用 三.通用控件 API 函数 1.用于控件的 WM 函数 2.常用 API 函数 3._ ...

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

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

  3. 【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

    文章目录 一.导入头文件 二.桌面程序入口函数 三.注册窗口 四.创建窗口 五.显示窗口 六.完整代码示例 七.相关资源 基于 [OpenGL]一.Visual Studio 2019 创建 Wind ...

  4. 深入解析Windows窗口创建和消息分发

    Windows GUI采用基于事件驱动的编程模型,事实上几乎所有的界面库都是这样做的.在纯粹的Window32 SDK编程时代,人们还可以搞懂整个Windows窗体创建和消息的流通过程,但是在现在各种 ...

  5. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    本系列博文几乎没有难啃的"专业术语",尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一.(由于本人也是由于项目需要,所以才来查阅相关资料,文中出现的错误欢迎指出,共同进 ...

  6. Delphi非应用程序主窗口创建MDI

    对Delphi很熟悉的人,都知道MDI窗口的创建方式,是将主窗口的formstyle设置成MDIForm,然后将各个要设置成MDI的窗口的FormStyle都设置成MDIChild,运行就可以看到效果 ...

  7. 解决MFC 窗口创建时 争夺焦点的问题

    解决MFC 窗口创建时 争夺焦点的问题 参考文章: (1)解决MFC 窗口创建时 争夺焦点的问题 (2)https://www.cnblogs.com/h2052519/p/6377635.html ...

  8. Windows下游戏制作(1)---win32窗口创建(2)

    写出一个窗口 之前我们简单的认识了一下win32主函数,下面我们来讨论一下如何用这个主函数作为起点来写出一个win32窗口程 序. int WINAPI WinMain(   HINSTANCEhIn ...

  9. 【opencv】opencv窗口创建、大小调整等问题

    opencv窗口创建.大小调整等问题 图像最开始大小可能为1280*720或者其他大小的: 使用cv::resizeWindow函数之后,不同的参数感觉窗口大小没有多少改变,看不出来: 使用cv::s ...

最新文章

  1. OKR怎么使用比较好?
  2. sql server 2008 故障转移群集
  3. 自适应col自动换行显示_10kV配网自适应综合型馈线自动化技术的测试问题及解决措施...
  4. 误差模型:过拟合,交叉验证,偏差-方差权衡
  5. debian6 xen4.0安装 guest半虚拟化--debootstrap安装
  6. spring MVC RequestMappingHandlerMapping解析
  7. PyTorch框架学习一——PyTorch的安装(CPU版本)
  8. 怎么调整字段长短_【芝士蛋糕怎么总烤不熟呢?】
  9. jquery ajax 跨域解决方案 - CORS
  10. pytorch中的卷积操作详解
  11. 听说面试很少有人答出:距离最近点对问题
  12. linux安装挂载samba,【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
  13. 第一章 架构 1.4 编译 amp; 1.5总结
  14. puppet之用户管理
  15. 推荐《喵星人行为心理学》
  16. 3.数据结构 --- 栈和队列
  17. 4G江湖大战全面开启 移动4G用户数突破9000万
  18. eclipse的控制台显示有问题,关闭Limit console output
  19. 若干个数据首尾相连,构成一个圆环,找到连续的4个数之和最大的一段。
  20. python flash游戏_基于Python的Flash游戏人工智能

热门文章

  1. Java面试知识总结(带基础)
  2. 中国移动:移动互联网仍是未来发展立足点
  3. Machine Learning with Graphs 之 Traditional Methods for Machine Learning in Graphs
  4. TCP协议 握手与挥手
  5. 线上应用故障排查之一:高CPU占用
  6. 云服务赛道竞速,谁是云背后的力量?
  7. 第一章 编程基础_ASCII 编码和GBK编码
  8. 反向题在测试问卷信效度_如何确认问卷(考卷)的信度与效度?
  9. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第三章 xilinx 三速以太网IP核(TEMAC)的介绍
  10. div样式之margin