本笔记源自windows游戏编程大师技巧第二版2.4章,记做学习随笔。
使用vs2017环境编译。
dos下程序使用main作为开始函数,Windows程序均已WinMain()开始。
编译下列代码:
#include
#include
#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内的头文件
#include //他有许多重要的宏和头文件,可以简化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程序的逐行分析。