kanzi做3d时钟屏保

在这里插入图片描述
用kanzi做一个3d屏保

1. blender制作3d数字模型

下载一些好看的字体文件,用blender建模字体模型,导出fbx格式

2. 新建kanzi工程

导入fbx模型,创建节点,时分秒节点,最上面放一个按钮,用来点击
在这里插入图片描述
根据喜好给个火焰贴图,在shader里让uv随时间移动
在这里插入图片描述
screen背景透明
在这里插入图片描述

3. 代码

3.1 识别桌面分辨率

Application* createApplication()
{
    //获取win 桌面分辨率
     // 获取桌面窗口的句柄
    HWND hDesktopWnd = GetDesktopWindow();

    // 获取桌面窗口的设备上下文句柄
    HDC hDesktopDC = GetDC(hDesktopWnd);

    screenWidth = GetSystemMetrics(SM_CXSCREEN);
    screenHeight = GetSystemMetrics(SM_CYSCREEN);
    printf("screenWidth:%d, screenHeight:%d\n", screenWidth, screenHeight);

    // 释放设备上下文句柄
    ReleaseDC(hDesktopWnd, hDesktopDC);

    return new DesktopTime;
}

3.2 设置窗口透明

    virtual void onProjectLoaded() KZ_OVERRIDE
    {
        // Project file has been loaded from .kzb file.

        // Add initialization code here.

        // 使用FindWindow函数查找窗口句柄
        hwnd = FindWindow(L"KanziWindow", NULL);
        //Transparent background
        LONG ret = ::GetWindowLong(hwnd, GWL_EXSTYLE);
        ret = ret | WS_EX_LAYERED;
        ::SetWindowLong(hwnd, GWL_EXSTYLE, ret);
        ::SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), 255, LWA_COLORKEY | LWA_ALPHA);


3.3 绑定按键

 kanzi::TimerSubscriptionToken timerid = addTimerHandler(this->getMessageDispatcher(), kanzi::chrono::milliseconds(20), KZU_TIMER_MESSAGE_MODE_REPEAT, bind(&DesktopTime::onTimeOutEventHandler, this));

        Button2DSharedPtr btn = getScreen()->lookupNode<Button2D>("#Button 2D");

        if (btn) {
            btn->addMessageHandler(Button2D::PressedMessage, bind(&DesktopTime::onBtnClicked, this, std::placeholders::_1));
        }

点击屏幕控制开关

void onBtnClicked(ButtonConcept::PressedMessageArguments& messageArguments)
    {
        (void)messageArguments;
        //kzLogDebug(("{} {} ", __FUNCTION__, isOpen));

        isOpen = !isOpen;

3.4 定时器更新时间和动画坐标

void onTimeOutEventHandler()
    {
        m_anim->Update(20);

        PageHostSharedPtr p = getScreen()->lookupNode<PageHost>("#RootPage");
        if (p) {
            //获取系统时间
            SYSTEMTIME st;
            GetLocalTime(&st);

            //设置时间
            p->setProperty(DynamicPropertyType<int>("DesktopTime.hour1"), st.wHour >= 10 ? (int)(st.wHour / 10) : 0);
            p->setProperty(DynamicPropertyType<int>("DesktopTime.hour2"), st.wHour >= 10 ? st.wHour % 10 : st.wHour);

            p->setProperty(DynamicPropertyType<int>("DesktopTime.minute1"), st.wMinute >= 10 ? st.wMinute / 10 : 0);
            p->setProperty(DynamicPropertyType<int>("DesktopTime.minute2"), st.wMinute >= 10 ? st.wMinute % 10 : st.wMinute);

            p->setProperty(DynamicPropertyType<int>("DesktopTime.sec1"), st.wSecond >= 10 ? st.wSecond / 10 : 0);
            p->setProperty(DynamicPropertyType<int>("DesktopTime.sec2"), st.wSecond >= 10 ? st.wSecond % 10 : st.wSecond);

            p->setProperty(DynamicPropertyType<int>("DesktopTime.ScreenPosY"), m_y - screenHeight);
        }  

4. 效果

运行程序,桌面显示全屏3d数字屏保
点击画面,屏保向上退出,在屏幕顶显示黑条
点击黑条,屏保向下出现
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

logback之自定义pattern使用的转换器

目录 &#xff08;1&#xff09;场景介绍 &#xff08;2&#xff09;定义转换器BizCallerConverter &#xff08;3&#xff09;logback配置conversionRule &#xff08;4&#xff09;测试效果 前文《logback之pattern详解以及源码分析》已经介绍了pattern&#xff0c;以及…

QTDemo:串口调试工具

项目简介 本项目通过QT框架设计一款可以在Windows、Linux等平台的跨平台串口助手&#xff0c;串口功能能够满足基本的调试需求。 本项目采用的版本为&#xff1a;QT5.14 visual studio 2022 进行开发。 项目源码&#xff1a;https://github.com/say-Hai/MyCOMDemo 项目页面&am…

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案

问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…

AI 智能助手对话系统

一个基于 React 和 Tailwind CSS 构建的现代化 AI 对话系统&#xff0c;提供流畅的用户体验和丰富的交互功能。 项目链接&#xff1a;即将开放… 功能特点 &#x1f916; 智能对话&#xff1a;支持与 AI 助手实时对话&#xff0c;流式输出回答&#x1f4c1; 文件处理&#xff…

Design Compiler:两种工作模式(线负载模式和拓扑模式)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 Design Compiler可以以线负载模式或拓扑模式启动&#xff0c;必须选择其中一个模式。在拓扑模式下还可使用多模式和UPF模式&#xff1a;多模式允许在多种工作…

应急响应练习

文章目录 web1web2 web1 题目要求&#xff1a; 前景需要&#xff1a; 小李在值守的过程中&#xff0c;发现有CPU占用飙升&#xff0c;出于胆子小&#xff0c;就立刻将服务器关机&#xff0c;这是他的服务器系统&#xff0c;请你找出以下内容&#xff0c;并作为通关条件&#…

从零开始构建直播APP美颜功能:直播美颜SDK的开发实践指南

本文将从零开始&#xff0c;详细探讨如何开发一款功能完善的直播美颜SDK&#xff0c;帮助开发者快速集成美颜功能。 一、明确需求与功能设计 开发美颜功能的第一步是明确需求。直播场景中的美颜需求通常包括以下几点&#xff1a; 实时滤镜&#xff1a;提供多种风格的滤镜&am…

.NET周刊【12月第4期 2024-12-22】

国内文章 dotnet 简单使用 ICU 库进行分词和分行 https://www.cnblogs.com/lindexi/p/18622917 本文将和大家介绍如何使用 ICU 库进行文本的分词和分行。 dotnet 简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用 https://www.cnblogs.com/lindexi/p/18621674 本文将和大…

vue3大屏实现;使用使用CSS Grid实现大屏

文章目录 一、效果1.效果2.使用CSS Grid3.插件4.html代码5.index.scss代码 一、效果 1.效果 方案&#xff1a;采用CSS的Grid布局&#xff0c;实现首页大屏模块划分和自适应功能&#xff1b; 布局&#xff1a; 大屏主要内容&#xff0c;高宽比是1920*1080&#xff1b;即16:9的…

基于FISCO BCOS的电子签署系统

概述 本项目致力于构建一个安全、高效且功能完备的电子签署系统&#xff0c;通过整合区块链技术与传统数据库管理&#xff0c;为用户提供了可靠的电子签署解决方案&#xff0c;有效应对传统电子签署系统的数据安全隐患&#xff0c;满足企业和个人在数字化办公环境下对电子文档…

【PCIe 总线及设备入门学习专栏 5 -- PCIE接头引脚定义】

文章目录 PCIe 硬件接口 pin 本文转自&#xff1a;小K 硬件会 2024年09月03日 19:35 北京 PCIe 硬件接口 pin 在使用 PCIe 接口时&#xff0c;可以将 PCIe 金手指插入任何不短于金手指长度的 PCIe 插槽中。比如&#xff1a; x1 的 PCIe 金手指可以插入 x1、x4、x8 和 x16 的…

【开源免费】基于SpringBoot+Vue.JS大型商场应急预案管理系统(JAVA毕业设计)

本文项目编号 T 105 &#xff0c;文末自助获取源码 \color{red}{T105&#xff0c;文末自助获取源码} T105&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【鸿蒙NEXT】鸿蒙里面类似iOS的Keychain——关键资产(@ohos.security.asset)实现设备唯一标识

前言 在iOS开发中Keychain 是一个非常安全的存储系统&#xff0c;用于保存敏感信息&#xff0c;如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同&#xff0c;Keychain 提供了更高的安全性&#xff0c;因为它对数据进行了加密&#xff0c;并且只有经过授权的应用程序才…

VBA批量插入图片到PPT,一页一图

Sub InsertPicturesIntoSlides()Dim pptApp As ObjectDim pptPres As ObjectDim pptSlide As ObjectDim strFolderPath As StringDim strFileName As StringDim i As Integer 设置图片文件夹路径strFolderPath "C:\您的图片文件夹路径\" 请替换为您的图片文件夹路径…

【Gitlab】详细介绍与安装配置指南

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Gitlab 2、Gitlab起源 二、GitLab的核心功能 …

Mcnemar‘s exact test

与卡方检验的区别 与fisher exact test区别

从手术到诊断:Tekceleo超声波压电电机的全面医疗应用

在当今医疗领域&#xff0c;技术的不断创新正在推动传统医疗模式向更精准、更高效的方向转变。Tekceleo公司凭借其超声波压电电机技术&#xff0c;在医疗行业中逐步占据重要地位&#xff0c;为医疗操作的精准化与高效化做出了显著贡献。 Tekceleo超声波压电电机的技术特点 Tek…

Postman[3] 创建Get和Post请求

1.创建Get请求 以打开百度页面为例 链接&#xff1a;https://www.baidu.com/ 步骤&#xff1a; 1.1新建一个Collection 1.2Add Request 1.3填充请求的url 1.4 Send 1.5检查返回结果 注意&#xff1a;这里和我们打开网页看到的页面不一样&#xff0c;是因为缺少请求头&…

C# OpenCV机器视觉:姿态估计

在一个阴沉沉的下午&#xff0c;天空仿佛被一块巨大的灰色抹布盖住&#xff0c;细雨淅淅沥沥地洒着&#xff0c;阿强正在实验室里捣鼓他那些宝贝仪器&#xff0c;活像一个正在摆弄玩具的大孩子。突然&#xff0c;同事小杨像只没头的苍蝇一样冲了进来&#xff0c;脸上写满了困惑…

自动化测试模型(一)

8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中&#xff0c;测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象&#xff0c;总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…