day01 windows编程入门

window编程基本概念

Windows编程的本质就是使用好操作系统,想要用好操作系统必不可少的秘籍----MSDN。

Windows编程主要分为两种:
1、控制台编程(CUI)
2、图形界面编程(GUI)

Windows编程的基本要素
#include < windows.h>
在进行windows编程的时候需要包含一个新的万能头文件。
Windows.h 它是一个综合性头文件,它里面包含了许多其它都文件。

Windows常见的数据类型

UINT 无符号32位整型
DWORD 32位整数
PDWORD 32位整数类型指针。
BOOL 布尔类型
SHORT 带符号16位整数。
LRSULT 32位函数返回值
WPARAM 32位的消息参数。
LPARAM 32位的消息参数。

HANDLE 是windows编程中一个特别重要的概念,在计算机中翻译为句柄。用于标示操作系统中的某个对象。
HANDLE 通用句柄
HWND 窗口句柄
HINSTANCE 实例句柄


字符串的处理

windows包含这三种字符串类型,他们分别是:
CHAR 字符型,相当于char
WCHAR 宽字符型,相当于wchar_t
TCHAR 是一种条件编译的类型,根据条件可以代表wchar_t或char。

还有这些类型的指针类型:
PWCHAR WCHAR的指针类型
PTCHAR TCHAR的指针类型
PCWCHAR const WCHAR的指针类型

我们没有必要完全记住这些参数,我们只需要知道他们的普通用法就可以了。

三种字符型的比较:

CHAR charc[] = "123456"; //CHAR类型可以直接写出来
WCHAR charw[] = L"123456"; //WCHAR类型需要在字符串前面加上L标记其为宽字符类型
TCHAR chart[] = _T("123456"); //TCHAR类型需要以_T类型来表示
  • 字符串长度的比较
printf("%d\n",sizeof( charc));
printf("%d\n",sizeof( charw));
printf("%d\n",sizeof( chart));

TCHAR类型会根据你设置的字符串为标准,来适应成不同的类型。

unicode字符集为标准: TCHAR的字长 = WCHAR的字长
在这里插入图片描述
多字节字符集为标准: TCAHR的字长 = CHAR的字长
在这里插入图片描述

  • 字符串的打印
printf("%s\n", charc);
printf("%ws %ls\n", charw, charw);
// unicode字符集:printf("%ws\n", chart);
// 多字节字符集: printf("%s\n",chart);

CHAR类型直接用%s 打印
WCHAR类型用 %ls 或者%ws打印
TCHAR类型用%s或者%ws打印,这取决于你的字符集设置


字符串的长度

printf("%zd\n", strlen(charc));
printf("%zd\n", wcslen(charw));
printf("%zd\n", _tcslen(chart));

他们仅仅只有长度函数调用的不同:
在这里插入图片描述


第一个windows程序的编写

在windows中,我们有一个类似于C/C++的入口函数,如main函数。
在windows中,这个入口是这样的:

//类似于main函数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
//代码区
return 0;
}

你可以会觉得,这是什么鬼,怎么这么多参数,我们以前写的C++的mina最多也就两个参数啊,但是,你必须接受这个现实,windows编程有非常多的复杂概念,和非常复杂的声明等等。
例如:这前两个参数:HINSTANCE 这他喵的什么鬼??? 我们以前见过double,int,long,我们都可以很清晰的知道他们是什么意思,但是这玩意可读性这么差,而且还都是大写,怎么记得住啊。

但是!!
我们千万不要记住这些东西,浪费这些时间记住没用的参数是没有用的,我们完全不需要记,我们只需要记住特定的函数名字就可以,然后我们(在VS环境下)按F1 就可以找到他的官方文档,然后直接把文档的函数原型复制即可:

步骤:

  1. 写一个WinMain函数名字:
WinMain
  1. 选中WinMain,按 F1 :
    在这里插入图片描述
  2. 我们就可以直接把这段函数及原型抄上。。。

然后你在那个文档里,还可以找到很多关于此函数的信息:
例如他的每个参数的含义:

  • 参数一: HINSTANCE hInstance:当前应用程序实例的句柄
  • 参数二: HINSTANCE hPreInstance: 上一个程序实例的句柄(基本弃用此参数了)
  • 参数三: LPSTR lpCmdLine: 应用程序的命令行参数。
  • 参数四: int nShowCmd: 控制窗口的显示方式

我们千万不要死记硬背,要灵活使用F1查看帮助文档

那么我们已经写好了入口函数,应该如何编写一个最简单的windows应用程序呢?
首先我们先把此项目的属性改为 窗口 类型。
在这里插入图片描述
因为我们编写的已经不是黑窗口的控制台程序了,而是图形界面编程。。

我们使用MessageBoxW在产生一个最简单的弹窗:

#include <Windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
MessageBoxW(NULL, L"提示", L"提示", MB_OK);
return 0;
}

注意:

MessageBoxW:

  • 参数一:创建此窗口的所有者的句柄,可以为NULL,表示没有所有者。
  • 参数二:你要输入的内容
  • 参数三:窗口标题
  • 参数四:对话框的内容和行为: MB_OK表示你可以点击确定,这还有很多内容,可以直接查看它的官方文档:
    MessageBox官方文档

MessageBox又可以分为 MessageBox ,MessageBoxA , MessageBoxW等多种不同类型,我们统一使用MeseageBoxW 类型,因为以宽字符调用,我们输入字符串时也能够适应宽字符,兼容性比较好。。

程序运行结果:
**加粗样式**

我们已经完成了第一个窗口的实例,接下来我们将学习如何编写一个正规的第一个窗口。

posted @   hugeYlh  阅读(135)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示