WinMain

WinMain

WinMain是一個函式,該函式的功能是被系統調用,作為一個32位應用程式的入口點。WinMain函式應初始化應用程式,顯示主視窗,進入一個訊息接收一傳送循環,這個循環是應用程式執行的其餘部分的頂級控制結構。

基本介紹

函式原型,訊息,備註,速查,

函式原型

//使用Ansi字元int _stdcall WinMain(    HINSTANCE hInstance,    HINSTANCE hPrevInstance,    LPSTR lpCmdLine,    int nCmdShow)//使用UNICODE字元int _stdcall _tWinMain(    HINSTANCE hInstance,    HINSTANCE hPrevInstance,    LPTSTR lpCmdLine,    int nCmdShow)//可寫為int APIENTRY WinMain...int WINAPI WinMain...int CALLBACK WinMain...//因為 (在minwindef.h中)#define CALLBACK    __stdcall#define WINAPI      __stdcall#define APIENTRY    WINAPI
hinstance:應用程式當前實例的句柄。
hPrevlnstance:應用程式的先前實例的句柄。對於同一個程式打開兩次,出現兩個視窗第一次打開的視窗就是先前實例的視窗。對於一個32位程式,該參數總為NULL。
如果需要檢測另外一個實例是否已經存在,則使用CreateMutex函式創建一個獨一無二的名字。即使互斥名已經存在,CreateMutex函式也是成功的,但是GetLastError函式將返回 ERROR_ALREADY_EXISTS,這就表明應用程式有另外一個實例存在,因為它首先創建了互斥名。
lpCmdLine:指向應用程式命令行的字元串的指針,不包括執行檔案名稱。獲得整個命令行,參看GetCommandLine
第三個參數lpCmdLine是一個以空終止的字元串,指定傳遞給應用程式的命令行參數。例如:在D糟下有一個sunxin.txt檔案,當我們用滑鼠雙擊這個檔案時將啟動記事本程式(notepad.exe),此時系統會將D:\sunxin.txt作為命令行參數傳遞給記事本程式的WinMain函式,記事本程式在得到這個檔案的全路徑名後,就在視窗中顯示該檔案的內容。要在VC++開發環境中向應用程式傳遞參數,可以單擊選單【Project】→【Settings】,選擇“Debug”選項卡,在“Program arguments”編輯框中輸入你想傳遞給應用程式的參數。
nCmdShow:指明視窗如何顯示。該參數可以是下列值之一:
SW_HIDE:隱藏視窗並且激活另外一個視窗。
SW_MINIMIZE:最小化指定的視窗,並且激活在系統表中的頂層視窗。
SW_RESTORE:激活並顯示視窗。如果視窗已經最小化或最大化,系統將以恢復到原來的尺寸和位置顯示視窗(與SW_SHOWNORMAL相同)。
SW_SHOW:激活一個視窗並以原來的尺寸和位置顯示視窗。
SW_SHOWMAXIMIZED:激活視窗並且將其最大化。
SW_SHOWMINIMIZED:激活視窗並將其最小化(以圖示顯示)。
SW_SHOWMINNOACTIVE:將一個視窗顯示為圖示。激活視窗維持活動狀態。
SW_SHOWNA:以視窗的當前狀態顯示視窗。激活視窗保持活動狀態。
SW_SHOWNOACTIVATE:以視窗的最近一次的尺寸和位置顯示視窗。不激活視窗。
SW_SHOWNORMAL:激活並顯示視窗。如果視窗最大化或最小化,系統將其恢復到原來的尺寸和位置(與SW_RESTORE相同)。

訊息

//於WinUser.h中#define WM_SETFOCUS                     0x0007#define WM_KILLFOCUS                    0x0008#define WM_ENABLE                       0x000A#define WM_SETREDRAW                    0x000B#define WM_SETTEXT                      0x000C#define WM_GETTEXT                      0x000D#define WM_GETTEXTLENGTH                0x000E#define WM_PAINT                        0x000F#define WM_CLOSE                        0x0010#ifndef _WIN32_WCE#define WM_QUERYENDSESSION              0x0011#define WM_QUERYOPEN                    0x0013#define WM_ENDSESSION                   0x0016#endif#define WM_QUIT                         0x0012#define WM_ERASEBKGND                   0x0014#define WM_SYSCOLORCHANGE               0x0015#define WM_SHOWWINDOW                   0x0018#define WM_WININICHANGE                 0x001A#if(WINVER >= 0x0400)#define WM_SETTINGCHANGE                WM_WININICHANGE#endif /* WINVER >= 0x0400 */#define WM_DEVMODECHANGE                0x001B#define WM_ACTIVATEAPP                  0x001C#define WM_FONTCHANGE                   0x001D#define WM_TIMECHANGE                   0x001E#define WM_CANCELMODE                   0x001F#define WM_SETCURSOR                    0x0020#define WM_MOUSEACTIVATE                0x0021#define WM_CHILDACTIVATE                0x0022#define WM_QUEUESYNC                    0x0023#define WM_GETMINMAXINFO                0x0024#define WM_PAINTICON                    0x0026#define WM_ICONERASEBKGND               0x0027#define WM_NEXTDLGCTL                   0x0028#define WM_SPOOLERSTATUS                0x002A#define WM_DRAWITEM                     0x002B#define WM_MEASUREITEM                  0x002C#define WM_DELETEITEM                   0x002D#define WM_VKEYTOITEM                   0x002E#define WM_CHARTOITEM                   0x002F#define WM_SETFONT                      0x0030#define WM_GETFONT                      0x0031#define WM_SETHOTKEY                    0x0032#define WM_GETHOTKEY                    0x0033#define WM_QUERYDRAGICON                0x0037#define WM_COMPAREITEM                  0x0039#if(WINVER >= 0x0500)#ifndef _WIN32_WCE#define WM_GETOBJECT                    0x003D#endif#endif /* WINVER >= 0x0500 */#define WM_COMPACTING                   0x0041#define WM_COMMNOTIFY                   0x0044 #define WM_WINDOWPOSCHANGING            0x0046#define WM_WINDOWPOSCHANGED             0x0047#define WM_POWER                        0x0048返回值
如果函式成功,當它接收到一個WM_QUIT訊息時就中止,函式應該返回在該訊息的wParam參數的退出值。如果函式在進入訊息循環前退出,應該返回零。

備註

當接收到一個WM_QUIT訊息時,程式就中止。這時,WinMain函式應退出應用程式,並且返回傳遞給WM_QUIT訊息的wParam參數的值。如果由於調用PostQuitMessage函式而接收到WM_QUIT訊息,wParam的值是PostQuitMessage函式的nExitCode的值。請參看“創建一個視窗循環”。
ANSI應用程式可以使用WinMain函式的lpCmdLine參數進入命令行字元串(除了程式名之外)。WinMain不能返回Unicode字元串的原因是IpCmdLine使用的是LPSTR數據類型,而不是LPTSTR類型。GetCommandLine函式可以用於進入命令行的Unicode字元串,因為它使用的是LPTSTR類型。
Windows CE:Windows CE不支持下列 nCmdLine參數值:
SW_MINIMIZE;SW_RESTORE;SW_RESTORE;SW_SHOWMAXMIZED
SW_SHOWMINIMIZED;SW_SHOWMINNOACTIVE

速查

Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;頭檔案:Winbase.h庫檔案:用戶自定義。

相關詞條

熱門詞條

聯絡我們