用C++在Windows桌面上打个叉❌

news2024/10/5 12:57:35

我们的目标是,只写一二十行代码,用 Windows自带的原生接口,强行在桌面上打个大红❌,如图:

写了大半年C++,天天和“黑乎乎” 的小窗口你侬我侬?赶紧来打开一扇“Windows”,从窗口跳进全新的GUI世界吧。

0. 视频

用C++在Windows桌面上打个叉❌

1. 使用的 Windows API

1.1 GetSystemMetrics

说明:查询(检索)指定的 Windows (下同)系统的配置或度量。

在本例中,我们使用的 入参 nIndex 有两个:

  • SM_CXFULLSCREEN : 取主桌面的屏幕宽度;
  • SM_CYFULLSCREEN :取主桌面的屏幕高度。

注意:

  1. 如果有多个显示器,仅取主桌面;
  2. 经实测,宽度或高度不会包含任务栏。即:如任务栏布置为横向(常见:底部),则取桌面高度时,不含任务栏高度,如果任务栏布置为竖向,则取桌面宽度时,不含任务的宽度。

本课使用:

DesktopWidth = ::GetSystemMetrics(SM_CXFULLSCREEN);
DesktopHeight = ::GetSystemMetrics(SM_CYFULLSCREEN);

1.2 SetTimer

说明:设置一个定时器。

入参:

  1. hwnd:指定 定时器要绑定的窗口的句柄;该窗口可接收定时消息,也可指定为 nullptr,则定时器改为调用 lpTimerFunc: 指定的回调函数。
  2. nIDEvewnt:指定定时器事件编号;
  3. uElapse:指定定时间隔时长,单位为毫秒;
  4. lpTimerFunc :定时到点时,调用的函数;

本课使用:

::SetTimer(hwndDlg, ID_TIMER, 80 /*毫秒*/, OnTimer);

1.3 KillTimer

说明:通过指定窗口句柄和定时器事件编号,结束之前设置的定时器。

本课使用:

::KillTimer(hwndDlg, ID_TIMER);

1.3 GetDC

说明: 获取入参 hWnd 指定的窗口绘图用的设备上下文(Device Context);如 hWnd 为 nullptr,则返回整个屏幕的设备上下文。

注意: 使用完后,需调用 ReleaseDC() 归还。

本课使用:

auto hDC = ::GetDC(nullptr); // 得到主桌面的 DC (“画板”)

1.4 CreatePen

原型:

HPEN CreatePen(
  int      iStyle, // 画线风格
  int      cWidth, // 画线宽度
  COLORREF color   // 画线条颜色
);

说明:创建指定风格、宽度、颜色的笔资源。

参数:

  1. iStyle :支持: PS_SOLID(实线)、PS_DASH(虚线)、PS_DOT(点线)等风格;
  2. cWidth :宽度,单位为 象素;
  3. colro : 颜色,可使用宏 RGB(r, g, b) 组合 red、green、blue 三颜色的分量来创建不同颜色。

注意:
笔使用结束后,需及时调用 DeleteObject() 以释放所占用的资源。

本课使用:

//创建实线、宽10,红色的笔:
auto pen = ::CreatePen(PS_SOLID, 10, RGB(0xff, 0, 0)); 

1.5 更多 API

本课用到的全部 API 的详细说明,完整代码、完整项目文件下载,见 :

在Windows桌面上打个叉

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

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

相关文章

数据库系统课程笔记

初步认识数据库系统 schema 英 /ˈskiːmə/ 美 /ˈskiːmə/ n.(计划或理论的)提要,纲要 关系模型之基本概念 关系和表的差别 关系的特性 什么是sql 创建数据库(编写脚本) 创建表格语法(编写脚本) 修改表的结构语法 …

微服务Day4——Docker

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会…

如何生成一个随机数?

文章目录 虚假的随机数真正的随机数生成规定位数的随机数 虚假的随机数 说到如何生成一个随机数,可能当你百度后会看到这样一段代码。 srand((unsigned int)time(NULL)); int ret rand();那么一个随机数到底是如何生成的呢?我相信善于探索的你一定想知…

(黑客)自学笔记

特别声明: 此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施&#x…

Docker镜像分层

文章目录 docker镜像分层镜像层构成镜像FS 构成基础镜像层扩展镜像层容器层 镜像摘要分发散列值 多架构镜像工作原理 docker镜像分层 Docker 镜像由一些松耦合(关系不怎么紧密)的只读镜像层组成,Docker Daemon 负责堆叠这些镜像层&#xff0c…

vim安装及使用

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

得物 Android 包体积资源优化实践

包体积优化中,资源优化一般都是首要且容易有成效的优化方向。资源优化是通过优化APK中的资源项来优化包体积,本文我们会介绍得物App在资源优化上做的一些实践。 1. 插件优化 插件优化资源在得物App最新版本上收益12MB。插件优化的日志在包体积平台有具…

Kotlin基础(六):枚举类和扩展

前言 本文主要讲解kotlin枚举类和扩展 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 枚举类 1.1.1 枚举类的基本用法 Kotlin中的枚举类(enum class)用于定义一组具有预定义值的常量。它们在许多情况下都很有用,例如表示一组…

【外设篇】I2C工作原理

目录 一、I2C 简介 二、I2C 主设备与从设备的关系 三、I2C 数据传输过程 3.1 总线空闲状态 3.2 开始位和停止位的产生 3.3 主设备处于等待状态 3.4 ACK 应答位的产生 3.5 有效的数据传输 3.6 数据的传输 总结 一、I2C 简介 I2C(内置集成电路&#…

浏览器 html通知权限已经开了,但是还不提醒

如果您已经在Chrome浏览器中开启了HTML5通知,但是仍然不收到提醒,可能有几种可能的原因。下面是一些建议的解决方法: 检查浏览器设置: 确保HTML5通知在Chrome浏览器中正确启用。您可以按照以下步骤检查设置: 在Chrome中输入 chrom…

【Nacos源码系列】Nacos服务发现的原理

文章目录 服务发现是什么客户端服务发现服务端发现总结 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 上篇文章介绍了 Nacos服务注册的原理 ,本篇文章将从客户端和服务端的…

微服务保护——Sentinel【实战篇二】

一、线程隔离 🍉 线程隔离有两种方式实现: 线程池隔离信号量隔离(Sentinel默认采用) 线程隔离(舱壁模式)🥝 在添加限流规则时,可以选择两种阈值类型: QPS:…

LiveNVR监控流媒体Onvif/RTSP功能-支持无人机、IPC等设备RTMP推流转码分发H5无插件播放也支持GB28181输出

LiveNVR支持无人机、IPC等设备RTMP推流转码分发H5无插件播放也支持GB28181输出 1、无人机推流转国标2、获取RTMP推流地址2.1、RTMP推流地址格式2.2、推流地址示例 2、设备RTMP推流3、配置拉转RTMP3.1、直播流地址格式3.2、直播流地地址示例3.3、通道配置直播流地址 4、配置级联…

螺杆支撑座的加工工艺

螺杆支撑座是重要的传动元件,一般与滚珠螺杆搭配使用,滚珠螺杆的固定座可选择使用深沟球轴承C7精度,磨削螺杆的固定座可选择用角接触轴承的C5精度,C5的精度更高。 支撑侧没有精度,一般使用深沟球轴承,如果螺…

linux 系统编程-进程中的通信

目录 1 IPC 方法 2管道 2.1管道的概念 2.2 pipe 函数 2.3管道的读写行为 2.4 管道缓冲区大小 2.5 管道的优劣 2.6 FIFO 3.共享存储映射 3.1 文件进程间通信 3.2 存储映射 I/O 3.3 mmap 函数 3.4 munmap 函数 3.5 mmap 注意事项 3.6 mmap 父子进程通信 3.7 mmap …

JAVA 面试准备

这里写自定义目录标题 一、JAVA基础1.ArrayList2.HashMap3.Concurrenthashmap4.Stream5.synchronized6.线程池7.CompletableFuture8.Fork/join9.数组与链表的区别10.单例模式1.饿汉模式2.懒汉模式10.1、 为啥使用synchronized?10.2、 又为啥使用volatile?10.3、 那又又为啥用…

【MySQL进阶(一)】MySQL在Linux中的配置信息和数据备份工具

MySQL在Linux中安装的话可以看这篇博客:MySQL在Linux中的安装,我觉得总结的很好。 my.cnf 中的配置信息 当 MySQL 启动的时候,会从安装目录中加载软件数据,即使用 mysqld 工具初始化设置的 --basedir,会从数据目录中…

GaussDB云数据库配套工具UGO

目录 一、前言 二、数据库和应用迁移UGO定义 1、UGO定义 2、异构数据库迁移简图 三、数据库迁移的痛点 四、数据库和应用迁移UGO能力介绍 五、数据库和应用迁移UGO方案简图介绍 六、小结 一、前言 在数字化时代,企业面临着越来越多的数据库和应用迁移需求。…

SpringBoot解决跨域问题的几种方式

本文参考自:SpringBoot 解决跨域问题的 5 种方案!_springboot跨域问题解决方案_肥肥技术宅的博客-CSDN博客 SpringBoot解决ajax跨域问题-腾讯云开发者社区-腾讯云 跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷…

认识C++继承

认识继承 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由…