WINMAIN

#define WINAPI __stdcall
__stdcall 就是让编译器知道应该以兼容windows的方式来产生机器指令,如果你在别的平台开发,当然也不会去写winmain
WINAPI 转换成CALLBACK也是可行的,因为#define CALLBACK __stdcall,但人家之所以给同一个东西定义两个宏,当然是为了让程序能看懂,不然你在winmain前加一个CALLBACK别人要怎么理解呢。
去掉以后可以运行,但会发出警告
在这里插入图片描述
虽然去掉WINAPI对编译和运行并不造成影响,但为了安全起见和养成良好的习惯还是加上。
这个函数重复了一万遍还要再重复写一次
int WINAPI (In HINSTANCE hInstance,//句柄,一个数,不是指针,就是一串数字,类比身份证号
In HINSTANCE hPrevInstance,//前置句柄,一个Microsoft这么多年都无法删除的毫无存在的参数
In LPSTR lpCmdLine,//命令行,字符串,最简单的举例就是双击桌面图标这个值就是一串本地地址
In int nCmdShow);//窗口显示类型,最大化最小化图标化,隐藏等
nCmdShow如下:
SW_HIDE 隐藏并激活并一个窗口
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化
SW_RESTORE 激活并恢复原尺寸
SW_SHOW 以当前尺寸和位置激活并显示窗口
SW_SHOWMAXIMIZE 激活并最大化
SW_SHOWMINIMIZE 激活并最小化
SW_SHOWNA 以当前尺寸和位置显示但不激活窗口
SW_SHOWMINNOACTIVE 最小化显示窗口不激活
SW_SHOWNOACTIVE 恢复原尺寸显示窗口但不激活
SW_SHOWNORMAL 正常显示窗口

_In_表示外界向函数输入数据的意思
#define In SAL2_Source(In, (), Pre1_impl(__notnull_impl_notref) Pre_valid_impl Deref_pre1_impl(__readaccess_impl_notref))

有时候还是不要把时间浪费在没意义的事情上,比如拼命想搞懂_In_ 后面那一串是什么,这个我只看到pre1_impl跟踪到后面好像是一个结构体,总之现在没时间看了,以后有空有兴趣再来补充吧。
int WINAPI MessageBox(In_opt HWND hWnd,//附属窗口的句柄,填NULL则默认给桌面
In_opt LPCTSTR lpText,//内容文字
In_opt LPCTSTR lpCaption,//标题文字
In UINT uType);//窗口显示类型
uType目前提供的样式如下:
#define MB_OK 0x00000000L:
WINMAIN_第1张图片
#define MB_OKCANCEL 0x00000001L:
WINMAIN_第2张图片
#define MB_ABORTRETRYIGNORE 0x00000002L:
WINMAIN_第3张图片
#define MB_YESNOCANCEL 0x00000003L:
WINMAIN_第4张图片
#define MB_YESNO 0x00000004L:
WINMAIN_第5张图片
#define MB_RETRYCANCEL 0x00000005L:
WINMAIN_第6张图片
#define MB_CANCELTRYCONTINUE 0x00000006L:WINMAIN_第7张图片
可以和标识符结合例如MB_OK| MB_ICONHAND
结果是:
WINMAIN_第8张图片

标志符如下:
#define MB_ICONQUESTION 0X00000020L
WINMAIN_第9张图片
#define MB_ICONEXCLAMATION 0X00000030L
WINMAIN_第10张图片
#define MB_ICONASTERISK 0X00000040L
WINMAIN_第11张图片
_In_opt 表示选填,也就是写NULL也可以的意思

返回值即按下按钮之后的int值
常见的int值如下:
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7

你可能感兴趣的:(WINMAIN)