開發環境搭建好以后,就可以開始第一次win32程序
```
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
MessageBox(NULL, _T("Hello C Cmd Compile歡迎"), _T("Welcome"), MB_OKCANCEL);
return 0;
}
```
代碼很短,
**WinMain** 是Win32下的窗口程序的入口函數,就像是C語言的 main函數一樣。
**WINAPI** 是windef.h中定義的一個常量。 ``` #define WINAPI __stdcall```,表示函數參數按照從又向左的方式壓入堆棧,也有諸如\_\_cdecl、\_\_pascal等規則。使用\_\_stdcall還是\_\_cdecl或\_\_pascal,在純Windows編程下并非特別需要。所以這里如果不寫```WINAPI``` 也能正常生成程序。
有了以上程序源文件,現在就是要編譯,鏈接生成exe文件
* 使用cl命令編譯源程序,具體用法詳見[cl命令的用法](https://docs.microsoft.com/zh-cn/cpp/build/reference/d-preprocessor-definitions?view=vs-2019)
```
cl /c /D UNICODE /D _UNICODE cwin.c
/c 指只編譯,不鏈接
/D 指預處理選項,這里預定義了程序字符集為UNICODE.
沒帶下劃線的UNICODE主要是針對Windows的頭文件。
帶下劃線的\_UNICODE主要是針對C運行庫的。
同時要保證源文件的文本格式是unicode格式,用記事本打開源文件cwin.c,選擇“另存為”, 再選擇unicode即可
```
執行完成以上命令,在當前目錄下就會生成同名的cwin.obj文件。
* 使用 link命令 鏈接生成exe文件
``` link *.obj /SUBSYSTEM:WINDOWS /MACHINE:X86 user32.lib```
執行以上命令即可生成exe文件。
**這里的重點是如何處理unicode字符串:**
代碼中使用 ```_T("")``` 這個宏來包裹字符串,其意思是通過不同的編譯項,可以編譯成ANSI版本 或者 Unicode版本, 如果是L 宏。則只能編譯成Unicode版本。使用這兩個宏要引用 tchar.h 頭文件。
然后編譯的時候要帶上 ``` /D UNICODE /D _UNICODE ``` 這兩個編譯選項,才會生效,否則運行程序遇到中文會亂碼