📜  c 中的 winmain (1)

📅  最后修改于: 2023-12-03 15:13:47.764000             🧑  作者: Mango

C 中的 WinMain

WinMain 是 Windows 平台下的一个入口函数,用来启动一个 Windows 应用程序。在 WinMain 函数中,我们可以完成 Win32 API 的初始化,创建和显示窗口以及处理消息等一系列操作。

函数原型

WinMain 的函数原型如下:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

参数说明:

  • hInstance:应用程序实例的句柄。
  • hPrevInstance:上一个实例的句柄,Windows NT 之后的版本中不再使用。
  • lpCmdLine:包含命令行参数的指针。
  • nCmdShow:应用程序窗口的显示方式,如最大化、最小化等。
函数实现

以下是一个最基本的 WinMain 函数的实现:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    MSG  msg;
    WNDCLASS wc;

    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = "MyWndClass";

    if (!RegisterClass(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindow(
        "MyWndClass",
        "My Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        240, 120,
        NULL, NULL, hInstance, NULL);

    if (hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

在这个例子中,我们完成了以下操作:

  • 注册一个窗口类。
  • 创建一个窗口。
  • 显示窗口并更新。
  • 进入消息循环,等待消息的到来。

这个例子比较简单,只是展示了 WinMain 函数的大致流程。具体的实现可以根据需求进行调整。

总结

WinMain 函数是 Windows 应用程序的入口函数,它完成了一系列初始化操作,创建和显示窗口以及处理消息等任务。我们可以根据自己的需求对 WinMain 函数进行改进和扩展,以满足不同的需求。