emwin的异常显示和父子坐标问题(瞎写的,别看 -- 2)

news2024/10/19 2:43:43

文章目录

      • 4,想显示成
  • 最后的demo

仿真器中
1,格子状显示
在这里插入图片描述
把下面这句注释掉,就可能会这么显示

WM_SetCreateFlags(WM_CF_MEMDEV);

2,显示一副灰度图
在这里插入图片描述
很有可能你是这么写的
在这里插入图片描述
也就是

hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 200, 200, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);

3,
它的调用位置

WM_SetCreateFlags(WM_CF_MEMDEV);

这样调用

WM_SetCreateFlags(WM_CF_MEMDEV);
  / / 初始化 emWin
    GUI_Init();

显示
在这里插入图片描述
调用方式二:

    // 初始化 emWin
    GUI_Init();

	// 初始化窗口管理
	WM_SetCreateFlags(WM_CF_MEMDEV);

啥都没显示
在这里插入图片描述

总结就是先调用
WM_SetCreateFlags(WM_CF_MEMDEV);
再调用
GUI_Init();

但是能别调用就别调用

4,想显示成

在这里插入图片描述
把 WM_SetCreateFlags(WM_CF_MEMDEV); 注释掉就好了。
但是这又不是我想要的

最后的demo

显示的图像。
一点一点的分析吧,,,必须要知道每个函数的意思,而且有的函数跟自己的理解不一样。
在这里插入图片描述
源码:

#include "GUI.h"
#include "WM.h"

// 子窗口回调函数
static void _cbChildWindow(WM_MESSAGE* pMsg) {
    GUI_MEMDEV_Handle hMemDev;
    switch (pMsg->MsgId) {
    case WM_PAINT:
       
        //设置颜色并绘制矩形
        int x = WM_GetWindowOrgX(pMsg->hWin);//这里是相对屏幕坐标
        int y = WM_GetWindowOrgY(pMsg->hWin);//这里是相对屏幕的坐标
        int w = WM_GetWindowSizeX(pMsg->hWin);
        int h = WM_GetWindowSizeY(pMsg->hWin);
        GUI_RECT Rect0;
        WM_GetClientRect(&Rect0);//这里是相对父类的坐标(0,0,79,79)
        GUI_RECT Rect1;
        WM_GetWindowRect(&Rect1); //这里是相对屏幕的坐标(40,40,119,119)

        GUI_RECT Rect2;
        WM_GetInsideRect(&Rect2);//这里得到的是父类相对他父类的坐标,(0,0,249,249)
        GUI_SetColor(GUI_WHITE);
        GUI_FillRect(Rect2.x0, Rect2.y0, Rect2.x1, Rect2.y1);

        //printf("Child Rect: x0=%d, y0=%d, x1=%d, y1=%d\n", Rect2.x0, Rect2.y0, Rect2.x1, Rect2.y1);


        // 创建一个 80x120 的内存设备
        hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 80, 120, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888);
        GUI_MEMDEV_Select(hMemDev);
        GUI_SetBkColor(GUI_RED);
        //GUI_SetBkColor(GUI_TRANSPARENT);
        GUI_Clear();
        // 在内存设备中绘制内容
        GUI_SetColor(GUI_BLUE);
        GUI_FillRect(0, 0, 20, 50);
        GUI_SetColor(GUI_GREEN);
      //  GUI_SetFont(&GUI_Font13_ASCII);
        GUI_DispStringHCenterAt("Child", 40, 35);

        GUI_MEMDEV_Handle hMemDev2 = GUI_MEMDEV_CreateFixed(90, 10, 80, 120, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888);


        // 取消选择内存设备并将其内容复制到屏幕
        GUI_MEMDEV_Select(0);
        //GUI_MEMDEV_CopyToLCD(hMemDev);
        GUI_MEMDEV_Write(hMemDev);
        GUI_MEMDEV_Write(hMemDev2);
        // 删除内存设备
        GUI_MEMDEV_Delete(hMemDev);


        break;
    default:
        WM_DefaultProc(pMsg);
        break;
    }
}

// 父窗口回调函数
static void _cbParentWindow(WM_MESSAGE* pMsg) {
    WM_HWIN hChildWin;
    GUI_MEMDEV_Handle hMemDev;

    switch (pMsg->MsgId) {
    case WM_CREATE:
        // 创建子窗口,大小为 80x80,位于 (60, 60)
       // hChildWin = WM_CreateWindowAsChild(60, 60, 80, 80, pMsg->hWin, WM_CF_SHOW, _cbChildWindow, 0);
        hChildWin = WM_CreateWindowAsChild(10, 10, 80, 80, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS, _cbChildWindow, 0);
        break;

    case WM_PAINT:

        GUI_RECT Rect0;
        WM_GetClientRect(&Rect0);//这里是相对父类的坐标 (0,0,249,249)
        GUI_RECT Rect1;
        WM_GetWindowRect(&Rect1); //这里是相对屏幕的坐标  (30,30,279,279)

        GUI_RECT Rect2;
        WM_GetInsideRect(&Rect2);//这里得到的是父类的相对坐标,(0,0,249,249)

        // 创建一个 200x200 的内存设备
        hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 200, 220, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
        //hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 200, 200, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_16, GUI_COLOR_CONV_565);
        //hMemDev = GUI_MEMDEV_Create(0, 0, 200, 200);
       // hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 200, 200, 0, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
        //hMemDev = GUI_MEMDEV_CreateFixed(0, 0, 200, 200, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
        GUI_MEMDEV_Select(hMemDev);
        GUI_SetBkColor(GUI_DARKRED);
        GUI_Clear();
        // 在内存设备中绘制内容
        GUI_SetColor(GUI_GREEN);
        GUI_FillRect(0, 0, 200, 200);
        //GUI_SetColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
       // GUI_SetFont(&GUI_Font13_ASCII);
        GUI_DispStringHCenterAt("Parent", 100, 90);

        // 取消选择内存设备并将其内容复制到屏幕
        GUI_MEMDEV_Select(0);


        GUI_RECT Rect;
        WM_GetInsideRect(&Rect);
        GUI_SetColor(GUI_ORANGE);
        GUI_FillRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);

       //GUI_MEMDEV_CopyToLCD(hMemDev);
        GUI_MEMDEV_Write(hMemDev);

        // 删除内存设备
        GUI_MEMDEV_Delete(hMemDev);
        break;

    default:
        WM_DefaultProc(pMsg);
        break;
    }
}

void MainTask(void) {
    WM_HWIN hParentWin;

	// 初始化窗口管理
	//WM_SetCreateFlags(WM_CF_MEMDEV);

#if GUI_WINSUPPORT
//	WM_MULTIBUF_Enable(1);
#endif 
    // 初始化 emWin
    GUI_Init();

    // 创建父窗口,大小为 200x200,位于 (30, 30)
    hParentWin = WM_CreateWindow(30, 30, 250, 250, WM_CF_SHOW , _cbParentWindow, 0);

     //WM_CreateWindowAsChild(10, 10, 80, 80, hParentWin, WM_CF_SHOW| WM_CF_HASTRANS, _cbChildWindow, 0);
    //WM_InvalidateWindow(hParentWin);
    GUI_Exec();
    // GUI 主循环
    while (1) {
        GUI_Delay(100);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-02 单线程与高性能

Redis是单线程吗? Redis不是只有一个线程,通常所说Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数…

BGP(边界网关协议)

1、网络AS(自治系统) 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…

【c++并发编程】线程池实现

参考https://shanhai.huawei.com/#/page-forum/post-details?postId43796 完整代码 #include <iostream> #include <vector> #include <queue> #include <thread> #include <mutex> #include <condition_variable> #include <functi…

牛企查:性价比很高的企业综合查询小程序

很多人都会有查询企业信息的需求&#xff1a; 入职公司前查询企业的基本信息&#xff1b; 只是需要简单便捷查询到企业的信用代码注册地址等基础信息&#xff1b; 做企业调查&#xff0c;分析时需要用到企业的一些数据&#xff1b; 研究一些单项数据的时候&#xff0c;需要…

拟声 0.37.0 | 拟物风格,超级优美,功能丰富

拟声是一款功能丰富的音视频播放器&#xff0c;支持多种音频来源&#xff0c;并具备独特的歌词弹幕、音源转换、跨设备共享与控制等功能。其创新的LRC歌词编解码器和新拟物风格的UI设计为用户提供了一个全新的视听体验。 大小&#xff1a;36M 百度网盘&#xff1a;https://pan…

代码审计-Python Flask

1.Jinjia2模版注入 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug &#xff0c;模板引擎则使用 Jinja2。jinja2是Flask作者开发的一个模板系统&#xff0c;起初是仿django模板的一个模板引擎&#xff0c;为Flask提供模板支持&#xff0c;由于…

ubuntu下安装mysql遇到的问题

ubuntu下安装mysql sudo apt install -y mysql-server 出现问题 ……by process 3455 解决 安装 启动 systemctl status mysql.service sudo mysql -u root -p 如何修改密码 与datagrip的连接 查看IP ifconfig 若没安装 参考 Windows10的DataGrip2024.1.4连接ubuntu22.04中的M…

27.第二阶段x86游戏实战2-遍历周围NPC跳出递归循环

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01;0 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

公开课 | 2024清华大模型公开课 第6课 大模型前沿架构 Part 2(长文本、Scaling Law)

本文由readlecture.cn转录总结专注于音、视频转录与总结&#xff0c;2小时视频&#xff0c;5分钟阅读&#xff0c;加速内容学习与传播。 大纲 引言 介绍长文本和Scaling Law的研究方向 强调大型语言模型在日常生活中的应用 长文本处理 长文本的定义和例子 《哈利波特》系列书…

KubeSphere安装mysql8.4.0

背景 KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面&#xff0c;帮助企业快速构建一个强大和功能丰富的容器云平台。 安装组件前提&am…

Metasploit渗透测试之攻击终端设备和绕过安全软件

概述 在之前&#xff0c;重点讨论了针对服务器端的利用。但在当下&#xff0c;最成功的攻击都是针对终端的&#xff1b;原因是&#xff0c;随着大部分安全预算和关注都转向面向互联网的服务器和服务&#xff0c;越来越难找到可利用的服务&#xff0c;或者至少是那些还没有被破…

阿里商品发布框架如何覆盖海量规则

1688商品发布系统升级发品框架GPF&#xff0c;面对商品模型复杂度极高&#xff0c;发布的海量场景、多重业务逻辑如何覆盖&#xff1f; 本文从手工测试到自动化测试&#xff0c;以及完善的质量保障方案一一解答。 1、项目背景 1688商品发布系统运行多年&#xff0c;架构逐步…

OFDM学习-IP核学习-FIFO IP核和FFT IP核在vavido中的配置以及使用

FIFO IP核和FFT IP核在vavido中的配置以及使用 前言一、FFT IP核配置过程二、FIFO IP核配置过程总结 前言 记录一下OFDM学习中遇到的ip核使用方法&#xff0c;个人之前主要用Quatus&#xff0c;之前用ip核也比较少&#xff0c;记录一下配置过程吧以及一些参数的含义&#xff0…

【linux】Microsoft Edge 的 Bookmarks 文件存储位置

在 Linux 系统中&#xff0c;Microsoft Edge 的书签&#xff08;Bookmarks&#xff09;文件存储在用户的配置目录下。具体路径通常如下&#xff1a; ~/.config/microsoft-edge/Default/Bookmarks说明&#xff1a; 路径解释&#xff1a; ~ 表示当前用户的主目录。.config 是一个…

代替AD作为身份认证组件,深信服零信任aTrust与宁盾身份目录实现互操作

9月25日&#xff0c;经深信服科技股份有限公司和上海宁盾信息科技有限公司共同严格测试&#xff1a;宁盾身份目录服务软件能够与深信服零信任访问控制系统 aTrust 兼容对接运行&#xff0c;双方相互兼容&#xff0c;共同为企事业单位提供身份和零信任管理需求。 本次测试包含了…

笔记整理—linux网络部分(2)Linux网络框架

前文说过&#xff0c;在OSI中将网络分为7层&#xff0c;这是理论上将其分为7层&#xff0c;但实际上可以将其分为4层。如TCP协议就是将其分为4层。理论只是提出一种指导意见&#xff0c;但不是行业范本。 驱动层只关系有没有接到包&#xff0c;不关心包经过多少次转发&#xff…

Java 实战虚拟机 进阶 (一 万字)

实战 Java 虚拟机-高级篇 什么是 GraalVM GraalVM 是 Oracle 官方推出的一款 **高性能JDK&#xff0c;**使用它享受比 OpenJDK 或者 OracleJDK 更好的性能。 GraalVM 的官方网址&#xff1a;https://www.graalvm.org/官方标语&#xff1a;Build faster, smaller, leaner appli…

搭子小程序:全新在线找搭子,满足社交

搭子作为一种新的社交方式&#xff0c;为大众带来的各种陪伴型的社交模式&#xff0c;不管是饭搭子、健身、遛狗、学习等&#xff0c;都可以找到适合自己的搭子。搭子主打各个领域的陪伴&#xff0c;双方都能够在社交相处中保持着边界感&#xff0c;不涉及情感纠葛等&#xff0…

群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP

有nas的相信对公网都不模式&#xff0c;在现在基础上传带宽能有100兆的时代&#xff0c;有公网代表着家里有一个小服务器&#xff0c;像百度网盘&#xff0c;优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip&#xff0c;要么自己买个云服务器做内网穿…

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM&#xff08;应用性能管理&#xff09;工具&#xff0c;专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能&#xff0c;帮助开发者快速定位和解决性能瓶颈和故障。…