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 就可以找到他的官方文档,然后直接把文档的函数原型复制即可:
步骤:
- 写一个WinMain函数名字:
WinMain
- 选中WinMain,按 F1 :
- 我们就可以直接把这段函数及原型抄上。。。
然后你在那个文档里,还可以找到很多关于此函数的信息:
例如他的每个参数的含义:
- 参数一: 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 类型,因为以宽字符调用,我们输入字符串时也能够适应宽字符,兼容性比较好。。
程序运行结果:
我们已经完成了第一个窗口的实例,接下来我们将学习如何编写一个正规的第一个窗口。
本文来自博客园,作者:hugeYlh,转载请注明原文链接:https://www.cnblogs.com/helloylh/p/17209693.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)