今天开始win32的学习,不出意外的话每天一更,整理自己的学习内容。
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
//先说一下主函数的区别
//WinMain:窗口应用程序(GUI应用程序)的入口函数 ,不能缺少,不能改名字
//main: 控制台黑窗口应用程序(CUI应用程序)入口函数
//函数的调用约定:
//WINAPI : 宏定义
//实际上就是: __stdcall
//C语言函数默认调用约定是: __cdecl
//Windows API函数嘴遵守 __stdcall 调用约定,必须显示的加上。
//__cdecl 和 __stdcall
//1、定义了函数参数的入栈顺序
//2、由调用函数还是被调用函数来弹出栈(清理栈)
//__cdecl 和 __stdcall入栈方式:从右往左入栈
// CALLBACK 、APIENTRY =》 __stdcall
//接下来看WinMain函数参数
//第一个参数:HINSTANCE:应用程序实例句柄类型
//DECLARE_HANDLE(HINSTANCE); 宏函数
//#define DECLARE_HANDLE(HINSTANCE)
//struct HINSTANCE__
//{
// int unused;
//};
//typedef struct HINSTANCE__* HINSTANCE;
//HINSTANCE:结构体指针
//hInstance:当前应用程序实例句柄,(理解为:代表着当前这个应用程序,本质:程序的基地址)
//第二个参数:hPreInstance :当前应用程序前一个实例句柄,在32位应用程序以及往后,这个参数没有使用了,为NULL值,在16位机器应用程序上使用
//第三个参数:LPSTR:字符串类型
//typedef CHAR* NPSTR, * LPSTR, * PSTR;
//CHAR* => LPSTR
//typedef char CHAR;
//char <=> CHAR
//LPSTR <=> char*
//即命令行参数,传递一个字符串过来
//第四个参数:窗口的显示方式
//MessageBox函数弹出一个消息提示框
MessageBox(NULL, L"这是我的第一个Windows窗口", L"温馨提示", MB_OK);
/*函数原型
int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
*/
//第一个参数:父窗口句柄
//HWND :窗口句柄类型(唯一的标记一个窗口,相当于窗口为ID)
//HWND
//DECLARE_HANDLE(HWND);
/*
struct HWND__
{
int unused;
};
typedef struct HWND__* HWND;
*/
//第二个参数:要显示的文本
//LPCTSTR
//typedef LPCWSTR PCTSTR, LPCTSTR;
//typedef CONST WCHAR *LPCWSTR, *PCWSTR;
//#define CONST const
//CONST <=> const
//typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
//wchar_t <=> WCHAR
//wchar_t:宽字符,一个字符,占用两个字节
//char:窄字符,一个字符占用一个字节
//CONST WCHAR * <=> LPCWSTR <=> LPCTSTR <=> const wchar_t*
//L:告诉编译器字符串是采用宽字符串编码,Unicode编码
//第三个参数:消息框的标题
//LPCTSTR
//第四个参数:按钮与图标的组合
}
图为MessageBox的第四个参数的几种常用形式