WinMain 函数 (winbase.h)

用户提供的基于 Windows 的图形应用程序的入口点。

WinMain 是用于应用程序入口点的传统名称。 有关详细信息,请参阅“备注”。

语法

int __clrcall WinMain(
  [in]           HINSTANCE hInstance,
  [in, optional] HINSTANCE hPrevInstance,
  [in]           LPSTR     lpCmdLine,
  [in]           int       nShowCmd
);

参数

[in] hInstance

类型: HINSTANCE

应用程序的当前实例的句柄。

[in, optional] hPrevInstance

类型: HINSTANCE

应用程序上一个实例的句柄。 此参数始终为 NULL。 如果需要检测是否已存在另一个实例,请使用 CreateMutex 函数创建一个唯一命名的互斥体。 即使互斥已存在,CreateMutex 也会成功,但函数将返回ERROR_ALREADY_EXISTS。 这表示存在应用程序的另一个实例,因为它首先创建了互斥体。 但是,恶意用户可以先创建此互斥体,然后阻止应用程序启动。 若要防止出现这种情况,请创建一个随机命名的互斥体并存储该名称,以便只能由授权用户获取该名称。 或者,可以将文件用于此目的。 若要将应用程序限制为每个用户一个实例,请在用户的配置文件目录中创建一个锁定的文件。

[in] lpCmdLine

类型: LPSTR

应用程序的命令行,不包括程序名称。 若要检索整个命令行,请使用 GetCommandLine 函数。

[in] nShowCmd

类型: int

控制窗口的显示方式。 此参数可以是可在 ShowWindow 函数的 nCmdShow 参数中指定的任何值。

返回值

类型: int

如果函数成功,在收到 WM_QUIT 消息时终止,则它应返回该消息的 wParam 参数中包含的退出值。 如果函数在进入消息循环之前终止,则它应返回零。

注解

许多编程框架按约定使用 WinMain 名称。 根据编程框架,对 WinMain 函数的调用可以先行,后跟特定于该框架的其他活动。

WinMain 应初始化应用程序,显示其main窗口,并输入消息检索和调度循环,该循环是应用程序执行的其余部分的顶级控制结构。 在收到 WM_QUIT 消息时终止消息循环。 此时, WinMain 应退出应用程序,并返回 在 WM_QUIT 消息的 wParam 参数中传递的值。 如果由于调用 PostQuitMessage 而收到WM_QUIT则 wParam 的值是 PostQuitMessage 函数的 nExitCode 参数的值。 有关详细信息,请参阅 创建消息循环

ANSI 应用程序可以使用 WinMain 函数的 lpCmdLine 参数访问命令行字符串(不包括程序名称)。 请注意, lpCmdLine 使用 LPSTR 数据类型而不是 LPTSTR 数据类型。 这意味着 WinMain 不能由 Unicode 程序使用。 GetCommandLineW 函数可用于获取作为 Unicode 字符串的命令行。 某些编程框架可能会提供提供 Unicode 命令行的替代入口点。 例如,Microsoft Visual Studio C++ 编译程序将名称 wWinMain 用于 Unicode 入口点。

示例

以下代码示例演示如何使用 WinMain

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    return MessageBox(NULL, "hello, world", "caption", 0);
}

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)

请参阅

概念性

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

其他资源

PostQuitMessage

引用

TranslateMessage

Windows