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