【Window编程】Step.1 我的第一个Windows程序

时间:2021-12-23 19:06:40

还记得初学c语言和c++时写的hello,world.

#include<stdio.h>
int main()
{
printf("Hello,world!");
return 0;
}

#include<iostream>
using namespace std;
int main()
{
cout<<"Hello,world!"<<endl;
return 0;
}

而现在我踏入了Windows编程的大门,让我们也从hello,world程序开始

#include<windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance ,
PSTR szCmdLine , int iCmdShow)
{
MessageBox(NULL,TEXT("Hello,windows!"),TEXT("HelloWin32API!"),0);
return 0;
}

出自《Windows程序设计:第五版》.

·几乎所有用C语言编写的windows程序都有的预处理器(preprocessor)指令:

#include<windows.h>

Windows.h是一个最重要的包含文件,它囊括了若干其他的windows头文件。

·WINDEF.H 基本数据类型的定义

·WINNT.H 支持Unicode的类型定义

·WINBASE.H 内核函数

·WINUSER.H 用户界面函数

·WINGDI.H 图形设备接口函数


Windows的程序入口是WinMain().在WINBASE.H中定义如下

int
WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
);
LPSTR和PSTR 都是指向字符串的指针,前缀LP代表长指针(Long Pointer),是16位Windows的产物。
现在写作PSTR.(win32)

Windows程序在变量命名上采用“匈牙利标记法”(Hungarian Notation).

变量名都有一个短前缀,表明该变量的数据类型。

·i表示int.

·sz表示“以零结尾的字符串”(string terminated with a zero).

WinMain()的返回值定义为int.

WINDEF.H 中定义 #define WINAPI __stdcall

"这条语句规定了一种函数调用约定,表明如何生成在堆栈中放置函数调用参数的机器代码。"

【update】(_stdcall是汇编相关的东西有兴趣的可以去search一下)

WinMain()的第一个参数叫 “实例句柄”(Instance Handle).应用程序当前实例的句柄。

第二个参数 hPrevlnstance:应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32位程序,该参数总为NULL。如果需要检测另外一个实例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回 ERROR_ALREADY_EXISTS,这就表明应用程序有另外一个实例存在,因为它首先创建了互斥名。

第三个参数 lpCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名。获得整个命令行,参看GetCommandLine。第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将D:\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Program arguments”编辑框中输入你想传递给应用程序的参数。

第四个参数 nCmdShow:指明窗口如何显示。

可选值为

SW_HIDE:隐藏窗口并且激活另外一个窗口。 SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。 SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。 SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。 SW_SHOWMAXIMIZED:激活窗口并且将其最大化。 SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。 SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。 SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。 SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。不激活窗口。 SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。


from《window程序设计:第五版》.