#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdline,int iCmdShow)


{
MessageBox(NULL,TEXT("Hello,Windows Program!"),TEXT("HelloMsg"),0);
return 0;
}

WinMain函數的定義
WinMain函數的原型聲明如下:
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
);
WinMain函數接收4個參數,這些參數都是在系統調用WinMain函數時,傳遞給應用程序的。
第一個參數hInstance表示該程序當前運行的實例的句柄,這是一個數值。當程序在Windows下運行時,它唯一標識運行中的實例(注意,只有運行中的程序實例,才有實例句柄)。一個應用程序可以運行多個實例,每運行一個實例,系統都會給該實例分配一個句柄值,并通過hInstance參數傳遞給WinMain函數。
第二個參數hPrevInstance表示當前實例的前一個實例的句柄。通過查看MSDN我們可以知道,在Win32環境下,這個參數總是NULL,即在Win32環境下,這個參數不再起作用。
第三個參數lpCmdLine是一個以空終止的字符串,指定傳遞給應用程序的命令行參數。例如:在D盤下有一個sunxin.txt文件,當我們用鼠標雙擊這個文件時將啟動記事本程序(notepad.exe),此時系統會將D:\sunxin.txt作為命令行參數傳遞給記事本程序的WinMain函數,記事本程序在得到這個文件的全路徑名后,就在窗口中顯示該文件的內容。要在VC++開發環境中向應用程序傳遞參數,可以單擊菜單【Project】→【Settings】,選擇“Debug”選項卡,在“Program arguments”編輯框中輸入你想傳遞給應用程序的參數。
第四個參數nCmdShow指定程序的窗口應該如何顯示,例如最大化、最小化、隱藏等。這個參數的值由該程序的調用者所指定,應用程序通常不需要去理會這個參數的值。
關于WinMain函數前的修飾符WINAPI,請參看下面關于__stdcall的介紹。讀者可以利用goto definition功能查看WINAPI的定義,可以看到WINAPI其實就是__stdcall