vs2017建立第一个win32窗口程序
1.简要了解
1.API是什么意思?
Application programming interface 应用程序编程接口,可以理解为,是函数,是接口。
2.SDK是什么意思?
Software development kit 软件开发包,资源的集合
SDK编程=》win32编程
3.窗口的客户区和非客区
4.什么是句柄?
比如有窗口句柄,进程句柄…句柄就是这些资源的ID.标志着这些资源。
2.建立第一个win32
第一步
第二步
如果这一步不是选择的空项目,里面会有很多已经写好的东西,
如果选择的是控制台:
则运行会报如下错误:
改正方法:
属性=》连接器=》系统=》子系统=》窗口
再次运行就ok了
第三步
第四步:写上你的代码运行起来吧
#include<Windows.h>
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreHinstance, LPSTR lpCmdLine, int nCmdShow)
{
//消息提示框
MessageBox(NULL, L"我的第一个win32窗口程序", L"吃鞭炮", MB_OK);
return 0;
}
第五步:运行起来,走一个
3.参数解读
#include<Windows.h>
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字符集
第三个参数:标题
第四个参数:就是那个确定按钮