📜  winmain 示例 - C++ (1)

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

WinMain 示例 - C++

本示例展示了 WinMain 函数的基本用法,以及 Windows 程序的创建和运行步骤。

WinMain 函数

WinMain 函数是 Windows 应用程序的入口函数,它的原型如下:

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

它接收四个参数:

  • hInstance:当前应用程序实例的句柄。
  • hPrevInstance:前一个应用程序实例的句柄。
  • lpCmdLine:命令行参数,即应用程序启动时传入的参数。
  • nCmdShow:窗口显示方式。

WinMain 函数的返回值为应用程序的退出码。通常情况下,返回值为 0 表示应用程序正常退出,非零值表示异常退出。

创建 Windows 程序

Windows 程序的创建过程主要涉及以下步骤:

  1. 定义窗口类。
  2. 注册窗口类。
  3. 创建窗口。
  4. 进入消息循环。

以下是一个简单的 Windows 程序创建过程示例:

// 定义窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = "WindowClass";

// 注册窗口类
RegisterClass(&wc);

// 创建窗口
HWND hWnd = CreateWindow("WindowClass", "My Window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInstance, NULL);

// 显示窗口
ShowWindow(hWnd, nCmdShow);

// 进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

// 退出应用程序
return (int)msg.wParam;
示例代码

以下是一个完整的基于 WinMain 函数的 Windows 程序示例代码:

#include <windows.h>

// 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

            TextOut(hdc, 10, 10, "Hello, Windows!", 15);

            EndPaint(hWnd, &ps);
            break;
        }

        case WM_DESTROY:
        {
            PostQuitMessage(0);
            break;
        }

        default:
        {
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 定义窗口类
    WNDCLASS wc = {0};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszClassName = "WindowClass";

    // 注册窗口类
    RegisterClass(&wc);

    // 创建窗口
    HWND hWnd = CreateWindow("WindowClass", "My Window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInstance, NULL);

    // 显示窗口
    ShowWindow(hWnd, nCmdShow);

    // 进入消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // 退出应用程序
    return (int)msg.wParam;
}

该程序创建了一个简单的窗口,并在窗口中显示了一句话。当用户关闭该窗口时,程序将正常退出。