2021-09-26 初学c++ 创建窗口程序

本文详细介绍了Windows程序设计的基础,包括窗口过程函数WindowProc的实现,用于处理用户关闭操作,以及WinMain函数的流程,涵盖窗口类注册、窗口创建、显示及消息循环。通过示例代码展示了如何使用Windows API创建并管理窗口。
摘要由CSDN通过智能技术生成

#include <windows.h>

// HWND hwnd,窗口句柄
// UINT msg,消息参数
// WPARAM wParam,额外参数
// LPARAM lParam 附带参数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

    //处理 用户操作
    switch (msg)
    {
    case WM_CLOSE:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
//窗口程序的启动入口
//HINSTANCE hInstance,当前应用实例
// HINSTANCE hPrevInstance,之前应用实例
// LPSTR lpCmdLine,命令行启动参数
// int nShowCmd 显示的命令 如何显示窗口
// 注册窗口--创建窗口--显示窗口---用户操作
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    // 注册窗口
    WNDCLASSEX wndclass;
    wndclass.cbClsExtra = 0;
    wndclass.cbSize = sizeof(WNDCLASSEX);
    wndclass.cbWndExtra = 0;
    wndclass.hbrBackground = NULL;
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//设置光标
    wndclass.hIcon = NULL;
    wndclass.hIconSm = NULL;
    wndclass.hInstance = hInstance;
    wndclass.lpfnWndProc = WindowProc;
    wndclass.lpszClassName = L"Window";
    wndclass.lpszMenuName = NULL;
    wndclass.style = CS_VREDRAW | CS_HREDRAW;
    ATOM atom = RegisterClassEx(&wndclass);
    if (!atom) {
        // 注册窗口失败,弹出框
        MessageBox(NULL, L"Register Fail", L"Error", MB_OK);
        return 0;
    }
    // 设置视口大小
    RECT rect;
    rect.left = 0;
    rect.right = 1280;
    rect.top = 0;
    rect.bottom = 720;
    // 修改rect值,保证视口大小的窗口值
    AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, NULL);
    int windowWidth = rect.right - rect.left;
    int windowHeight = rect.bottom - rect.top;
    // 创建窗口
    HWND hwnd = CreateWindowEx(NULL, L"Window", L"asWindow", WS_OVERLAPPEDWINDOW,
        100, 100, windowWidth, windowHeight,
        NULL, NULL, hInstance, NULL);
    // 显示窗口
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);
    MSG msg;
    while (true)
    {
        if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
            {
                break;
            }
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hosshot2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值