zoukankan      html  css  js  c++  java
  • 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那样,不知道框架自己做了些什么。

  • 相关阅读:
    常用的系统操作需要的响应时间
    几种RAID技术比较
    iptables详解
    mount命令详解
    解决CSocket高数据传输问题
    VC++ ComBox下拉菜单看不到值
    封装MySQL C API 基本操作
    MySQL存储过程和存储函数
    MYSQL 常用命令
    VS2005连接MySQL C API
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4383678.html
Copyright © 2011-2022 走看看