Windows 11开发全解析
Windows 11开发全解析
一、搭建开发环境
在开始Windows 11开发之前,搭建一个高效的开发环境是至关重要的。Windows 11提供了多种工具和框架,可以帮助开发者快速搭建起一个强大的开发环境。
1. Visual Studio 2024
Visual Studio 2024是微软为Windows 11优化的最新集成开发环境(IDE)。它支持多种编程语言,包括C++、C#、Python等,并提供了丰富的调试和性能分析工具。
下载并安装最新版本的Visual Studio 2024后,你可以根据需要选择安装不同的工作负载,如“桌面开发(C++)”、“Web开发(ASP.NET)”和“跨平台开发”等。确保安装Windows 11 SDK,这是开发现代Windows应用的重要工具。
安装完成后,你可以创建一个简单的C++项目来体验开发过程。以下是一个简单的C++示例,展示如何在Windows环境中输出一段简单的文本:
#include<iostream>
int main() {std::cout << "Hello, Windows 11 Development!" << std::endl;return 0;
}
该代码通过命令行在Windows上运行,并输出“Hello, Windows 11 Development!”。
为了更好地管理和构建跨平台项目,Visual Studio 2024提供了对CMake的支持。CMake是一个跨平台的构建工具,可以为多个开发环境生成编译配置。以下是一个简单的CMakeLists.txt文件的示例,用于构建C++项目:
cmake_minimum_required(VERSION 3.10)
project(HelloWindows)
add_executable(HelloWindows main.cpp)
通过这种方式,你可以轻松地使用CMake管理大型项目,并在不同的平台上进行构建。
2. Windows Terminal与PowerShell
Windows Terminal是Windows 11中强大的命令行工具,它集成了多个命令行环境,包括PowerShell、CMD和WSL 2。通过Windows Terminal,开发者可以轻松在不同的环境中切换,提高工作效率。
Windows Terminal的强大之处在于其高度可定制性。你可以通过修改settings.json文件,自定义终端的外观和行为。以下是一个自定义主题的示例,展示如何更改终端的颜色和字体:
{"profiles": {"defaults": {"background": "#282C34","foreground": "#ABB2BF","fontFace": "Cascadia Code","fontSize": 12},"list": [{"name": "PowerShell","commandline": "powershell.exe"},{"name": "Ubuntu","commandline": "wsl.exe"}]}
}
PowerShell是Windows上的强大脚本语言,尤其适合自动化任务。你可以使用PowerShell管理系统配置、部署应用程序以及执行复杂的文件操作。以下是一个简单的PowerShell脚本,展示如何批量重命名目录中的所有文件:
Get-ChildItem -Path "C:\Files" | ForEach-Object {Rename-Item $_.FullName -NewName ("New_" + $_.Name)
}
这个脚本会遍历C:\Files目录中的所有文件,并为每个文件添加“New_”前缀。
3. WSL 2(Windows Subsystem for Linux 2)
WSL 2是Windows 11中的一项重要功能,它允许你在Windows中运行完整的Linux内核。通过WSL 2,开发者可以轻松地在同一台设备上进行跨平台开发,尤其是开发需要依赖Linux环境的应用程序。
在Windows 11中,安装WSL 2变得更加简单。你可以通过以下PowerShell命令一键安装:
wsl --install
安装完成后,使用以下命令查看可以安装的Linux发行版:
wsl --list --online
选择你喜欢的发行版并安装,例如:
wsl --install -d Ubuntu
通过WSL 2,开发者可以直接在Windows 11上运行Linux应用。以下是一个简单的C++示例,展示如何在WSL 2中编译并运行C++程序:
#include<iostream>
int main() {std::cout << "Hello from WSL 2!" << std::endl;return 0;
}
在WSL 2中使用GNU编译器编译并运行程序。通过这种方式,你可以在Windows 11上轻松开发和运行Linux应用。
二、Windows编程基础
Windows编程涉及多个方面,包括窗口操作、文件操作、消息处理等。以下是一些Windows编程的基础知识和示例代码。
1. 窗口操作函数
Windows编程中,窗口操作是基本且重要的部分。以下是一些常用的窗口操作函数及其示例代码:
- MoveWindow:移动窗口并调整其大小。
BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);
第一个参数是窗口的句柄,X和Y表示左上角起始位置,nWidth和nHeight表示窗口的范围,bRepaint表示是否重绘。
示例:
void Move_Window(HWND hwnd) {MoveWindow(hwnd, 300, 100, 120, 40, TRUE);
}
- GetClientRect:获取窗口客户区的大小。
BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
通过hwnd句柄获取大小,并返回给一个RECT结构的指针。
示例:
LPRECT Get_Win_Rect(HWND hwnd) {LPRECT Main_Rect = new RECT;GetClientRect(hwnd, Main_Rect);return Main_Rect;
}
- GetWindowText:获取窗口标题或控件的文本。
int GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount);
第一个参数表示句柄,第二个参数表示缓冲区指针,第三个参数表示接受的最大数量。
示例:
void Get_My_WindowText(HWND hwnd) {WCHAR a[100] = { 0 };GetWindowText(hwnd, a, 100);MessageBox(hwnd, a, L"获取文本框的内容", MB_OK);
}
- SetWindowText:更改窗口标题或控件的文本。
BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString);
示例:
void Set_MyWindow_Text(HWND hwnd) {WCHAR a[] = L"sm7 6666";HWND hwnd_T = GetDlgItem(hwnd, 0x104);SetWindowText(hwnd_T, a);
}
- SetDlgItemText:设置对话框中控件的文本。
BOOL SetDlgItemTextA(HWND hDlg, int nIDDlgItem, LPCSTR lpString);
示例:
WCHAR a[] = "hello world";
SetDlgItemText(hwnd, id, a);
- SetParent:给一个窗口设置新的父窗口。
HWND SetParent(HWND hWndChild, HWND hWndNewParent);
示例:
void Set_MyWindow_Father(HWND hwnd_child, HWND hwnd_parent) {SetParent(hwnd_child, hwnd_parent);
}
- FindWindow:检索顶级窗口的句柄。
HWND FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName);
示例:
HWND hwnd = FindWindow(NULL, "窗口标题");
- TranslateMessage:将虚拟键消息转换为字符消息。
BOOL TranslateMessage(const MSG *lpMsg);
- EnumChildWindows:枚举属于指定父窗口的子窗口。
BOOL EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam);
三、文件操作
在Windows编程中,文件操作是一个重要的部分。C标准库提供了一系列文件操作函数,包括文件删除、文件重命名、创建临时文件等。
1. 文件删除函数remove
int remove(const char *fname);
功能:删除参数fname所指向的字符串所标识的文件。成功删除返回值为0,删除失败返回值为非零值。
示例:
#include <stdio.h>
int main() {int stat = remove("d:/path/1.txt");if (!stat) printf("删除成功。\n");else printf("删除失败。\n");return 0;
}
相关文章:
Windows 11开发全解析
Windows 11开发全解析 一、搭建开发环境 在开始Windows 11开发之前,搭建一个高效的开发环境是至关重要的。Windows 11提供了多种工具和框架,可以帮助开发者快速搭建起一个强大的开发环境。 1. Visual Studio 2024 Visual Studio 2024是微软为Windows…...
如何进行数学家式的学习思考?
如何进行数学家式的学习思考? 学生阶段的数学学习是非常重要的,对这一点很少有人质疑。一提起数学学习,一些学生、家长甚至一些教师认为,学生的数学学习往往侧重于掌握基本概念、公式和解题技巧,通过做题来巩固知识和提…...
自定义类型--结构体
目录 1. 结构体类型的声明 1.1结构的声明 1.2 结构体变量的创建和初始化 1.3不完全结构体 1.4结构的⾃引⽤ 2 结构体的内存对齐 2.1offsetof 2.2 对⻬规则 2.3 为什么存在内存对⻬? 2.4修改默认对⻬数 3. 结构体传参 4 结构体实现位段 4.1什么是位段 4.2 位段的内…...
笔试练习day7
目录 OR59 字符串中找出连续最长的数字串题目解析解法(双指针遍历)代码 NC109 岛屿数量题目解析解法代码(dfs)dfs的实现 拼三角题目解析解法(枚举)代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 &…...
python 爬虫 入门 一、基础工具
目录 一,网页开发者工具的使用 二、通过python发送请求 (一)、get (二)、带参数的get (三)、post 后续:数据解析 一,网页开发者工具的使用 我们可以用 requests 库…...
金融衍生品中的风险对冲策略分析
金融衍生品是现代金融市场中不可或缺的一部分,它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加,风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略,分析…...
linux下建立软链接
深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够,但是又不想修改原来在代码中写的路径,这个时候制作软连接很有作用,把占用量大的目录移到别的空闲磁盘,然后在原来的目录做一个软连接指向那个移到的空…...
MySql数据库left join中添加子查询
user表查询出数据列表(多条,如id)左连接到order表中的order_agent_id字段,并通过 order_agent_id分组,求和user_order_partner,使用COALESCE()聚合函数对未获取到和值的进行默认赋值,防止查询不…...
redis--过期策略和内存淘汰策略
redis过期策略 1、惰性删除 当客户端尝试访问某个键时,Redis会先检查该键是否设置了过期时间,并判断是否过期。 如果键已过期,则Redis会立即将其删除。这就是惰性删除。 总结:该策略可以最大化的节省CPU资源,却对内存非…...
qt QTableview 左侧 序号 倒序
本文主要在QTableview插入数据的基础上,使左边序号实现倒序,实现如下图所示。 解决办法: QTableview左侧是QHeaderView类构成的,重写QHeaderView的paintSection, 重写序号的文字内容,进而 实现QTableview …...
隧道代理IP如何帮助企业采集数据?
在数字化时代,数据已成为企业决策的重要基石。无论是市场调研、竞品分析,还是用户行为研究,高质量的数据采集都是企业成功的关键。然而,面对复杂的网络环境和日益严格的反爬虫机制,如何高效、稳定地采集数据成为了一个…...
Spring Boot知识管理系统:技术与方法论
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…...
SpringBoot1~~~
目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import 编辑 Conditional ImportResource 配置绑定Configur…...
兼容多家品牌手机的多协议取电快充芯片
随着智能手机的普及和功能不断的增强,电池续航能力成为了用户关注的焦点,为了解决这各问题各大手机厂商推出了手机快充技术,快充协议是快充技术的核心,每家品牌手机都有自己的独家快充协议,如FCP/SCP协议是华为手机的独…...
Java和Python的不同
1. 语法差异 Java: - Java是一种强类型语言,要求在编译时明确变量的数据类型。 - Java代码块由大括号 {} 包围,如方法体、循环和条件语句。 - Java使用分号 ; 作为语句的结束符。 public class HelloWorld {public static void main(String[] args) {S…...
Moshang摩熵医药数据库
摩熵医药数据库是摩熵数科信息公司旗下的一个核心产品,专注于为医药行业提供全面的数据支持和决策服务。该医药数据库整合了中、美、欧、日等全球七十多个主流国家的数10万数据信息源,其中收载的50亿数据体系的覆盖了生物医药全生命周期数据和精细化工全…...
基于web的酒店客房管理系统【附源码】
基于web的酒店客房管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…...
潜水定位通信系统的功能和使用方法_鼎跃安全
潜水定位通信系统是保障潜水安全与作业高效的关键设备。它利用先进的声呐、无线电等技术,可精准定位潜水员位置。在水下能实现潜水员之间以及与水面的双向通信,确保信息及时传递。具备高可靠性和稳定性,即使在复杂水环境中也能正常运行。 一、…...
Golang | Leetcode Golang题解之第477题汉明距离总和
题目: 题解: func totalHammingDistance(nums []int) (ans int) {n : len(nums)for i : 0; i < 30; i {c : 0for _, val : range nums {c val >> i & 1}ans c * (n - c)}return }...
JavaWeb——Maven(1/8):整体介绍(什么是Maven、Maven的作用、小结)
目录 什么是Maven Maven的作用 依赖管理 统一项目结构 项目构建 小结 Web前端开发的知识了解完毕后,接下来要进入后端Web开发的学习,这一部分的内容是学习的重点。在这一部分内容中,首先要了解 Java 项目的构建工具 Maven。 首先先来介…...
Flowable 7.x 实战:手把手教你从数据库里捞出BPMN2.0 XML并优雅展示(Vue3 + Spring Boot)
Flowable 7.x 实战:从数据库提取BPMN2.0 XML的工程化实现(Vue3 Spring Boot全链路解析) 在流程引擎的实际应用中,BPMN2.0 XML作为流程定义的标准化载体,其可视化展示能力直接影响开发调试效率。本文将完整演示如何构建…...
5分钟搞定!用Docker Compose一键部署Penpot设计协作平台(含SMTP配置避坑指南)
5分钟极速部署Penpot:Docker Compose全流程指南与SMTP实战避坑 中小团队在设计协作工具选型时,往往陷入两难:商业软件成本高昂,开源方案部署复杂。Penpot作为Figma的开源替代品,凭借其完整的协作功能和零成本优势&…...
终极免费EVE舰船配置神器:Pyfa完整实战指南
终极免费EVE舰船配置神器:Pyfa完整实战指南 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 在EVE Online这个充满挑战的宇宙中,打造一艘完美的…...
保姆级教程:用Coze零代码打造一个能聊天的微信公众号机器人(附服务器配置避坑指南)
零基础玩转Coze:从智能体创建到微信公众号部署全指南 在数字化营销日益重要的今天,拥有一个能24小时响应客户需求的智能客服已成为许多企业的标配。但对于没有技术背景的运营和市场人员来说,开发一个功能完善的聊天机器人似乎遥不可及。Coze平…...
Three.js 3D地图实战:从GeoJSON数据到交互式可视化(附完整代码)
Three.js 3D地图实战:从GeoJSON数据到交互式可视化 当我们需要在网页上展示一个具有真实地理特征的3D地图时,Three.js无疑是最强大的工具之一。它不仅能让地图以立体的形式呈现,还能添加各种交互效果,让数据可视化变得更加生动。本…...
深度解析PDFMathTranslate:揭秘AI如何实现毫秒级学术文档翻译与精准排版保留
深度解析PDFMathTranslate:揭秘AI如何实现毫秒级学术文档翻译与精准排版保留 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/Op…...
ARM嵌入式开发:寄存器操作与函数指针实战
## 1. 嵌入式开发中的寄存器操作技巧### 1.1 寄存器地址访问方法 在ARM架构嵌入式开发中,直接操作硬件寄存器是底层开发的核心技能。通过C语言访问特定内存地址的标准做法是使用指针类型转换:c #define GSTATUS1 (*(volatile unsigned int *)0x560000B0)…...
自动驾驶中的点云处理:Voxel-based与Pillar-based方法实战对比(附代码示例)
自动驾驶中的点云处理:Voxel-based与Pillar-based方法实战对比(附代码示例) 在自动驾驶技术快速发展的今天,点云数据处理已成为环境感知系统的核心环节。激光雷达扫描产生的海量三维点云数据,如何被高效、准确地转化为…...
开源动作捕捉与3D数据采集:FreeMoCap如何颠覆传统动捕方案
开源动作捕捉与3D数据采集:FreeMoCap如何颠覆传统动捕方案 【免费下载链接】freemocap Free Motion Capture for Everyone 💀✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap 在游戏开发、动画制作和运动科学研究领域,…...
别再只会while(1)了!聊聊MCU裸机开发的6种实用架构,从51到STM32都能用
从超级循环到事件驱动:MCU裸机开发的6种架构实战指南 当你第一次点亮LED时,while(1)循环就像魔法一样简单有效。但随着项目复杂度增加——需要同时处理按键消抖、屏幕刷新、数据通信和状态管理时,那个曾经可靠的超级循环突然变成了意大利面条…...
