今天開始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的第四個參數的幾種常用形式
