windows SDK编程 --- 第一个程序

一、基础知识

1.Unicode 和 ANSI

在 Windows 编程中,Unicode 和 ANSI 是两种不同的字符编码方法,它们用于定义如何在计算机中表示和存储字符数据。

ANSI

ANSI(American National Standards Institute)编码是一种基于单字节的字符集,它包括 256 个字符(实际使用中通常小于 256 个)。这种编码方式主要适用于表示拉丁字母和一些其他字符,但它不能覆盖全球所有的文字和符号。ANSI 编码通常与特定的代码页相关,如代码页 1252 用于西欧语言。

在 Windows API 中使用 ANSI 时,相关的函数通常有一个 A 后缀(如 CreateFileAMessageBoxA),表示它们接受 char 类型的 ANSI 字符串作为参数。

Unicode

Unicode 是一个全球性的编码标准,旨在为地球上几乎所有的文字系统提供一个唯一的数字标识。Unicode 使用更宽的字符编码(最常见的是 UTF-16 或 UTF-8),可以表示数十万个不同的字符,而不仅限于 ANSI 的几百字符限制。

Windows API 中的 Unicode 函数通常带有 W 后缀(如 CreateFileWMessageBoxW),接受 wchar_t 类型的 Unicode 字符串。当编译器设置中定义了 UNICODE 宏时,不带后缀的函数名(如 CreateFileMessageBox)会被定义为相应的 Unicode 版本(CreateFileWMessageBoxW)。

在这里插入图片描述


2. 为什么入口函数是WinMain而不是main

在 Windows 应用程序开发中,使用 WinMain 而不是传统的 main 函数作为入口点,是因为 Windows 桌面应用程序需要与 Windows 操作系统交互的方式不同于标准的控制台应用程序。WinMain 提供了一种与 Windows 操作系统特定功能集成的方式,特别是对于图形用户界面(GUI)应用程序。


3. 什么是句柄

在Windows操作系统的环境下,“句柄”(Handle)是一个非常关键的概念。句柄是一个用于标识资源或对象的抽象引用。在Windows编程中,句柄通常表示对各种内部资源的引用,例如窗口、文件、菜单、图像或其他系统对象。

Windows中常见的句柄类型:

窗口句柄(HWND):
用于标识窗口的句柄。每个窗口都有一个唯一的句柄,可以用于在API调用中引用该窗口。
文件句柄(HANDLE):
用于文件操作的句柄,如打开、读取、写入文件等。
设备上下文句柄(HDC):
用于定义设备的绘图环境。它可以包括可用于绘图的画笔、背景色等属性。
图标句柄(HICON)、光标句柄(HCURSOR):
分别用于标识图标和光标资源。
模块句柄(HINSTANCE、HMODULE):
用于标识加载到内存中的一个可执行模块(如DLL或EXE文件)。

4. MessageBox

int MessageBox(HWND    hWnd,        // 父窗口的句柄LPCTSTR lpText,      // 对话框中显示的文本消息LPCTSTR lpCaption,   // 对话框的标题UINT    uType        // 定义对话框样式和行为的标志
);

参数详解

hWnd:
父窗口的句柄。如果传入 NULL,MessageBox 将没有父窗口,独立显示。
lpText:
显示在对话框内的消息文本。
lpCaption:
对话框的标题栏文本。
uType:
定义对话框样式和用户可用操作的选项。这个参数可以是多个标志的组合,用于指定包含哪些按钮(如 MB_OK, MB_YESNO)和图标(如 MB_ICONERROR, MB_ICONINFORMATION)。


二、第一个程序

#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance,     // 当前实例的句柄HINSTANCE hPrevInstance, // 前一个实例的句柄,现在总是为 NULLLPSTR lpCmdLine,         // 命令行参数的字符串int nCmdShow             // 指示程序窗口应如何被显示
)
{// 显示消息框MessageBox(NULL, "Hello, World!", "Greeting", MB_OK);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot集成logback到mysql 8

spring boot集成logback到mysql 8 依赖数据库准备创建log日志用户&#xff0c;并创建数据库执行建表sql 配置文件bugbug 1&#xff1a;Failed to instantiate type ch.qos.logback.classic.db.DBAppenderbug信息&#xff1a;解决&#xff1a; bug2: DBAppender cannot function…

一起学习python——基础篇(20)

前言&#xff0c;之前经常从网上找一些免费的接口来测试&#xff0c;有点受制于人的感觉。想了想还不如直接写一个接口&#xff0c;这样方便自己测试。自己想返回什么格式就返回什么样子&#xff0c;不用担心服务报错&#xff0c;因为自己就可以完全掌控。然后宿舍二哥告诉我py…

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…

觉得自己有讨好型人格,怎么办?

生活中&#xff0c;许多人可能有过这样的困扰&#xff1a; 不敢拒绝别人提出的要求&#xff0c;过于草率地作出承诺&#xff0c;等到发现自己无力兑现承诺&#xff0c;又不敢去面对现实、向别人道出真相&#xff0c;只好编造理由和借口来逃避承诺。 跟别人意见不一时&#xff0…

[MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目

文章目录 获取资源从源码构建从CDN获取获取扩展插件 创建项目创建控件创建Blazor组件初始化保存销毁编写渲染逻辑 实现只读/编辑功能切换模式获取只读模式状态响应切换事件 实现明/暗主题切换项目地址 Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它由CodeX…

基于spring boot的农机电招平台

基于spring boot的农机电招平台系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表&#xff0c;进入对应的详细数据表&#xff0c;然后找到&#xff1a;www_96kaifa_com_enewsuser这个表&#xff0c;双击打开修改&…

tested4142

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

深度剖析Java中的String类

目录 引言 String类的特性 String类的部分实现代码&#xff1a; 不可变性&#xff1a; 补充&#xff1a; 常量池&#xff1a; 不可变性的好处 创建String对象 创建String对象的常用的三种方法如下&#xff1a; 使用常量串构造&#xff08;最常用&#xff09;&#xf…

Taichi库,一个最强渲染多功能的python库

Taichi库,一个最强渲染多功能的python库简称太极库 一个最强渲染多功能的python库—Taichi库 Taichi 是一个嵌入在 Python 中的领域特定语言&#xff08;DSL&#xff09;. Taichi 的主要功能之一是加速计算密集的 Python 程序,帮助这些程序 实现可以媲美 C/C 甚至 CUDA 的性能.…

大厂Java笔试题之统计兔子出生问题

题目&#xff1a;有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子…