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

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

以下代码示例演示如何使用 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 [仅限桌面应用]
目标平台 窗户
标头 winbase.h (包括 Windows.h)

另请参阅

概念

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

其他资源

PostQuitMessage

参考

TranslateMessage

Windows