WinMain函數
WinMain函數作爲Win32程序的入口點被系統調用。
int WINAPI WinMain(
HINSTANCE hInstance, // 程序當前實例句柄
HINSTANCE hPrevInstance, // 程序之前實例句柄
LPSTR lpCmdLine, // 命令行
int nCmdShow // 顯示窗口狀態
);
參數:
hInstance
當前程序的實例句柄
hPrevInstance
之前的程序實例句柄。對於Win32程序這個參數一直是NULL。 如果你需要檢測程序的另一個實例是否已經存在,你可以用CreateMutex函數創建一個唯一的命名的互斥量。即使這個互斥量已經存在,仍然可以創建成功,只不過GetLastError函數將返回ERROR_ALREADY_EXISTS.這表明程序的另一個實例已經存在,因爲它先創建了互斥量。
lpCmdLine
指向以null結尾的字符串的指針,爲應用程序指定命令行,不包括程序的名字。利用GetCommandLine函數獲取整個命令行。
nCmdShow
指定窗口以何種形式顯示,這個參數可以是以下值中的一個:
Value Meaning
SW_HIDE 隱藏當前窗口,激活另外一個窗口
SW_MAXIMIZE 最大化指定窗口
SW_MINIMIZE 最小化指定窗口,並以Z順序激活接下來的最高級別窗口
SW_RESTORE 激活並顯示窗口如果窗口是最小化或最大化狀態,系統會把窗口恢復到原來
的尺寸和位置。當恢復最小化窗口時,應用程序應該指定這個值。
SW_SHOW 以當前尺寸和位置激活並顯示窗口
SW_SHOWMAXIMIZED 以最大化形式激活並顯示窗口
SW_SHOWMINIMIZED 以最小化形式激活並顯示窗口
SW_SHOWMINNOACTIVE 顯示最小化窗口,這個值類似於SW_SHOWMINIMIZED,除了這個值不能激活窗口
SW_SHOWWNA 以當前尺寸和位置顯示窗口,這個值類似於SW_SHOW,除了這個值不能激活窗口
SW_SHOWNOACTIVATE 以最近的尺寸和位置顯示窗口,這個值類似於SW_SHOWNORMAL,
除了這個值不能激活窗口
SW_SHOWNORMAL 激活並顯示窗口。如果窗口是最小化或最大化狀態,系統恢復窗
口原來的尺寸和位置。應用程序在第一次顯示窗口應該制定這個值。
返回值
如果這個函數成功,它將接收WM_QUIT消息後結束。函數應該返回包含在消息參數wParam中的退出值。如果函數在進入消息循環之前結束,它應該返回0。
備註
WinMain函數應該能初始化應用程序,顯示主窗口,進入一個消息檢索和分配循環。這個循環是應用程序其他執行操作中最高級別的控制結構。當接收到WM_QUIT消息時,消息循環會結束。在這個時候,WinMain函數應退出應用程序,並返回一個值,傳遞到WM_QUIT消息參數wParam中。如果調用PostQuitMessage函數返回了WM_QUIT,那麼參數wParam的值就是PostQuitMessage函數參數nExitCode的值。更多信息參見創建消息循環(Creating a Message
Loop).
ANSI應用程序可以利用WinMain函數的參數lpCmdLine獲得命令行字符串,除了程序名字。WinMain函數不能返回Unicode字符串的原因是參數lpCmdLine的數據類型是LPSTR,而不是LPTSTR。GetCommandLine函數可以用來在命令行獲取Unicode字符串,因爲這個數據類型是LPTSTR。