VS2017创建第一个win32窗口程序(一)及其详细解释(API,SDK,句柄,WINAPI,WinMain,HINSTANCE,LPSTR,int...这些参数是什么意思?)
vs2017建立第一个win32窗口程序
1.简要了解2.建立第一个win32第一步第二步第三步第四步:写上你的代码运行起来吧第五步:运行起来,走一个
3.参数解读
1.简要了解
1.API是什么意思? Application programming interface 应用程序编程接口,可以理解为,是函数,是接口。
2.SDK是什么意思? Software development kit 软件开发包,资源的集合 SDK编程=》win32编程
3.窗口的客户区和非客区 4.什么是句柄? 比如有窗口句柄,进程句柄…句柄就是这些资源的ID.标志着这些资源。
2.建立第一个win32
第一步
第二步
如果这一步不是选择的空项目,里面会有很多已经写好的东西, 如果选择的是控制台:
则运行会报如下错误: 改正方法: 属性=》连接器=》系统=》子系统=》窗口 再次运行就ok了
第三步
第四步:写上你的代码运行起来吧
#include
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreHinstance, LPSTR lpCmdLine, int nCmdShow)
{
//消息提示框
MessageBox(NULL, L"我的第一个win32窗口程序", L"吃鞭炮", MB_OK);
return 0;
}
第五步:运行起来,走一个
3.参数解读
#include
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreHinstance, LPSTR lpCmdLine, int nCmdShow)
{
//消息提示框
MessageBox(NULL, L"我的第一个win32窗口程序", L"吃鞭炮", MB_OK);
return 0;
}
//WINAPI :函数的调用约定(规定了参数入栈顺序) 是从右往左还是从左往右
//WINAPI : __stdcall //C语言函数,默认的调用约定 __cdecl
//入口函数:WinMain, 不能改为其他名字
//HINSTANCE :应用程序实例句柄类型 转到定义看一看:
DECLARE_HANDLE(HINSTANCE);
再转定义:
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
把name替换为HINSTANCE
DECLARE_HANDLE(HINSTANCE);
#define DECLARE_HANDLE(HINSTANCE)
struct HINSTANCE__{
int unused;
};
typedef struct HINSTANCE__ *HINSTANCE;
看来他就是一个结构体指针。
//hInstance:当前应用程序实例句柄, 简单理解(代表当前exe) //hPreInstance: 当前应用程序的前一个实例句柄, 32为系统上已经废弃了,不用了, NULL, 16为机器上的.
//LPSTR: => char* 命令行参数 第一次是CHAR*
typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR;
小写的char,就是大写的CHAR
typedef char CHAR;
所以LPSTR,就是char*
什么是命令行参数? 比如我们直接在cmd–>notepad时候,打开了一个空记事本呢 加上命令行参数时,直接打开了我桌面的hello.txt //int: // nCmdShow:窗口的显示方式. 最大化,最小化,隐藏等
MessageBox:消息框
MessageBox(NULL, L"我的第一个win32窗口程序", L"吃鞭炮", MB_OK);
消息框功能创建、显示和操作消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任意组合。
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
第一个参数 :HWND hwnd 窗口句柄,父窗口是谁,没有父窗口,我就是独立的窗口
第二个参数:显示的文本,加“L”是告诉编译器,我这个字符串要使用Unicode编码。不加可不行,因为我的工程就是unicode字符集
第三个参数:标题
第四个参数:就是那个确定按钮