windows SDK编程 --- 第一个程序(1)

一、基础知识

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, // 前一个实例的句柄,现在总是为 NULL
    LPSTR lpCmdLine,         // 命令行参数的字符串
    int nCmdShow             // 指示程序窗口应如何被显示
)
{
    // 显示消息框
    MessageBox(NULL, "Hello, World!", "Greeting", MB_OK);

    return 0;
}
  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值