• win32之全屏窗口


    游戏开发中经常使用会让游戏以全屏窗口的状态运行,下面一个例子就是来实现这个效果的。

    #include <windows.h>
    
    void RegisterMyClass();
    LRESULT CALLBACK MainWndProc(HWND hwnd, 
        UINT uMsg, 
        WPARAM wParam, 
        LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
    {
        // 注册窗口类
        RegisterMyClass();
    
        // 创建窗口
        HWND hwnd = CreateWindow(
            TEXT("MainWindow"), // 类名
            L"我的应用程序", // 窗口标题文字
            WS_POPUP, // 窗口外观样式
            0, //38, // 窗口相对于父级的x坐标
            0, //20, // 窗口相对于父级的y坐标 GetSystemMetrics (SM_CXSCREEN):获取屏幕宽度
            GetSystemMetrics(SM_CXSCREEN), //480, // 窗口的宽度 GetSystemMetrics(SM_CYSCREEN):获取屏幕高度
            GetSystemMetrics(SM_CYSCREEN), //250, // 窗口的高度
            NULL, // 没有父窗口
            NULL, // 没有菜单
            hInstance, // 当前应用程序的实例句柄
            NULL); // 没有附加数据
    
        if (hwnd == NULL)
        {
            return 0;
        }
    
        // 显示窗口
        ShowWindow(hwnd, SW_NORMAL);
    
        // 更新窗口
        UpdateWindow(hwnd);
    
        // 消息循环
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return 0;
    }
    
    void RegisterMyClass()
    {
        WNDCLASS wc;
    
        wc.lpszClassName = TEXT("MainWindow");
        wc.lpfnWndProc = MainWndProc;
        wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
        wc.hInstance = NULL;
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        /*
        白色画刷 (HBRUSH)(COLOR_WINDOW + 1);
        黑色画刷 
        */
        wc.hbrBackground = (HBRUSH)(GetStockObject(BLACK_BRUSH));
        wc.lpszMenuName = TEXT("FirstWin32");
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
    
        RegisterClass(&wc);
    }
    
    LRESULT CALLBACK MainWndProc(HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_PAINT:
            break;
        case WM_DESTROY:
            PostQuitMessage(uMsg);
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
            break;
        }
    }

    其中最主要的就是红色的地方,第一个是设置窗口样式为弹出窗口,虽然没搞明白为什么使用弹出窗口可以实现全屏,但是总归是实现了,回头仔细看看API。

    后面是设置窗口的宽度和高度,分别设置为屏幕的宽度和高度即可。

    win32编程就是舒服,真正的刺刀见红的快感,刀刀见肉,不像mfc那样,不知道框架自己做了些什么。

  • 相关阅读:
    理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume
    理解OpenShift(4):用户及权限管理
    理解OpenShift(3):网络之 SDN
    理解OpenShift(2):网络之 DNS(域名服务)
    理解OpenShift(1):网络之 Router 和 Route
    HTML盒子模型
    架构系统的雪崩理解
    C++11 lambda表达式学习
    C++11 std::shared_ptr总结与使用
    Kafka学习笔记
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4383678.html
Copyright © 2020-2023  润新知