第一个 Windows 程序
* 纯净版
#include<Windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iShowCmd
)
{
MessageBox(NULL, TEXT("Hello, Windows!"), TEXT("HelloMsg"), 1);
return 0;
}
* 注释版
#include<Windows.h>
int WINAPI WinMain(
HINSTANCE hInstance, // 当前实例的句柄,唯一标识了我们这个程序(在Windows程序中,句柄就是一个数值,用来标识某个东西)
HINSTANCE hPrevInstance, // 前一个实例的句柄(在Win32中,此概念已弃用,因此该参数总是NULL)
LPSTR lpCmdLine, // 命令行参数
int iShowCmd // 指明程序最初如何显示(正常显示、最大化到全屏、最小化到任务栏)
)
{
MessageBox( // 函数作用:弹出一个小窗口,主要用来显示一些短消息
NULL, // 窗口句柄,唯一标识这个窗口
TEXT("Hello, Windows!"),// 要在信息框里面出现的文本字符串
TEXT("HelloMsg"), // 要在标题栏上显示的文本字符串
1 // 选择按钮的类型
);
return 0;
}
/*
Windows API 中"类型"的命名规则:
HINSTANCE: H + INSTANCE == handle + instance == 实例句柄
LPSTR: L + P + STR == long + pointer + str == 长字符指针
i == int
sz == 以零结尾的字符串
c == const == 常量
s == static == 静态
*/
编码问题
-
早期 Windows 使用 ASCII 进行编码,对于美国自己来用,基本上足够了
-
随着计算机的发展,世界各国都想要自己的文字能够在计算机上表示
-
为了统一世界各国的字符编码问题,Unicode 诞生了
-
它是通过增加位的方式来扩充,由原来的7位,变成现在的16位(方案不同,会有所出入,但只会更多,不会更少)
-
可容纳的符号,由原来的27=128,变成现在的216=65536(方案不同,会有所出入,但只会更多,不会更少)
-
使用 Unicode 也有缺点:就是用 Unicode 写的字符占用的空间,会比用 ASCII 写的字符所占用的空间大2倍
-
为此,人们希望最好能够创建两个版本的程序,让不同需求的人,拿最适合自己的那一个版本即可
-
于是,有了以下的设计:
使用 TCHAR.H 头文件,这个头文件提供了一系列的类型或函数的替代名称
一个命名为 _UNICODE
的标识符被定义了,在生成代码时
TCHAR
就自动变成 wchar_t
,_tprintf
就自动变成 wprintf
(w:width)
一个名为 _UNICODE
的标识符没有被定义,在生成代码时
TCHAR
就自动变成 char
,_tprintf
就自动变成 printf
同样的道理,对于字符串而言,使用 _T("hello world")
或 _TEXT("hello world")
也能自动变化
#include<Windows.h>
#include<tchar.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBox(NULL, _T("你好,窗口!"), _T("信息窗口"), 0);
return 0;
}
创建窗口
运行代码的时候:
- 打开项目属性。
- 导航到“链接器”>“输入”>“附加依赖项”。
- 在“附加依赖项”字段中添加
winmm.lib
(如果列表中还没有的话)