windows编程笔记【一】win32 API下第一个窗口

本笔记源自windows游戏编程大师技巧第二版2.4章,记做学习随笔。

使用vs2017环境编译。

dos下程序使用main作为开始函数,Windows程序均已WinMain()开始。

编译下列代码:

#include <Windows.h>
#include <windowsx.h>

#define WIN32_LEAN_AND_MEAN

int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow)
{
	//父窗口句柄是NULL,为空
	MessageBox(NULL, "这是第一个窗口", "我的第一个窗口", MB_OK | MB_ICONEXCLAMATION);
	return 0;
}

效果如下

程序剖析

创建window程序微软提供两种方式,一种是使用win32SDK,一种是使用MFC(微软基础库类)。

win32程序,也就是传统的exe程序,均使用win32SDK内的API来实现程序编写。

MFC可以说是win32SDK的封装版,MFC完全基于c++和类的特性,并且封装了更多功能,同时也更复杂。

我们使用win32SDK来编写程序。

#define WIN32_LEAN_AND_MEAN //第三行代码

的用处就是告诉编译器去掉不需要的MFC内容。

#include <Windows.h> //windows内的头文件
#include <windowsx.h> //他有许多重要的宏和头文件,可以简化windows编程。
int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow);

这是最重要的部分,window应用程序的入口函数是WinMain(),就如同dos下的main作为入口函数。

看一下他的奇怪参数:

hinstance——句柄类型参数,为你的程序生成的实例句柄,他可以理解为是一个指向你程序的特殊指针,供你随时对他操作。

hprevinstance——句柄类型参数,已经弃用,无需理会。

lpcmdline——win32使用的字符串类型,他是运行参数,和C/C++标准的int main(int argc,char** argv)的命令行参数类似。

ncmdshow——int类型,他在启动的适合被传递给程序,我们再说他的用法。

之后看一下WinMain函数内运行了什么

{
	//父窗口句柄是NULL,为空
	MessageBox(NULL, "这是第一个窗口", lpcmdline, MB_OK | MB_ICONEXCLAMATION);
	return 0;
}

WinMain()内调用MessageBox(),他是一个Win32API函数,用于弹出一个消息框。

MessageBox()没有太花哨的功能,提出一个窗口接受用户的输入,看一下他的函数原型吧。

int MessageBox(HWND hwnd, //句柄
LPCTSTR lptext, //文本显示内容字符串
LPCTSTR lpcaption, //标题内容字符串
UINT utype); //信息框类型

句柄我们还不太了解,这里可以认为是信息框的父窗口。

lptext和lpcaption的作用如图

utype可以设置消息框类型,他可选很多,见下表

图标:

按钮参数

含义

MB_OK

默认值。有一个确认按钮在里面。

MB_YESNO

有是和否在里面。

MB_ABORTRETRYIGNORE

有Abort(放弃),Retry(重试)和Ignore(跳过)

MB_YESNOCANCEL

消息框含有三个按钮:Yes,No和Cancel

MB_RETRYCANCEL

有Retry(重试)和Cancel(取消)

MB_OKCANCEL

消息框含有两个按钮:OK和Cancel

形态:

参数 含义

MB_ICONEXCLAMATION

一个惊叹号出现在消息框

MB_ICONWARNING

一个惊叹号出现在消息框

MB_ICONINFORMATION

一个圆圈中小写字母i组成的图标出现在消息框

MB_ICONASTERISK

一个圆圈中小写字母i组成的图标出现在消息框

MB_ICONQUESTION

一个问题标记图标出现在消息框

MB_ICONSTOP

一个停止消息图标出现在消息框

MB_ICONERROR

一个停止消息图标出现在消息框

MB_ICONHAND

一个停止消息图标出现在消息框

可以用以上两表,各选一个值使用或运算连接,来创建一个信息框。

MessageBox(NULL, "我是内容", "我是标题", MB_OK | MB_ICONEXCLAMATION);

例子中就是使用这两个作为参数。

值得注意的是,他还会返回选中的内容,参数如下。

IDOK(1)

OK

IDCANCEL(2)

CANCEL

IDABORT(3)

ABORT

IDRETRY(4)

RETRY

IDIGNORE(5)

IGNORE

IDYES(6)

YES

IDNO(7)

NO

我们已经完成对第一个windows程序的逐行分析。

猜你喜欢

转载自blog.csdn.net/nullccc/article/details/81181378