文章目录

  • ​​window编程基本概念​​
  • ​​Windows常见的数据类型​​
  • ​​字符串的处理​​
  • ​​第一个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的字长

day01 windows编程入门_Windows


多字节字符集为标准: TCAHR的字长 = CHAR的字长

day01 windows编程入门_Windows_02

  • 字符串的打印
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));

他们仅仅只有长度函数调用的不同:

day01 windows编程入门_字符串_03


第一个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应用程序呢?

首先我们先把此项目的属性改为 ​​窗口​​ 类型。

day01 windows编程入门_windows_04


因为我们编写的已经不是黑窗口的控制台程序了,而是图形界面编程。。

我们使用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 类型,因为以宽字符调用,我们输入字符串时也能够适应宽字符,兼容性比较好。。

程序运行结果:

day01 windows编程入门_Windows_05

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