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。