Win32 SDK中窗口全屏处理

      首先是考虑全屏处理的时机,是在创建窗口时还是显示窗口时进行,若是前者,则可以:

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst 
= hInstance; // 将实例句柄存储在全局变量中
    UINT width = GetSystemMetrics(SM_CXSCREEN);
    UINT height 
= GetSystemMetrics(SM_CYSCREEN);
   
//创建窗口
   hWnd=CreateWindow(
       szWindowClass,
       szTitle,
       WS_POPUP,
       
0,0,
       width,height,
       NULL,NULL,
       hInstance,
       NULL);
   
if (!hWnd)
   
{
      
return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   
return TRUE;
}

若是在显示窗口时进行处理:

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst 
= hInstance; // 将实例句柄存储在全局变量中
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 
0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
   
if (!hWnd)
   
{
      
return FALSE;
   }

   HWND   hDesk;   
   RECT   rc;   
   hDesk   
=   GetDesktopWindow();   
   GetWindowRect(   hDesk,   
&rc   );   
   SetWindowLong(   hWnd,   GWL_STYLE,   WS_BORDER   );   
   SetWindowPos(   hWnd,   HWND_TOPMOST,   
0,   0,   rc.right,   rc.bottom,   SWP_SHOWWINDOW);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   
return TRUE;
}

也可以让用户控制全屏的时机,比如按下”ESC“键后进入全屏

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst 
= hInstance; // 将实例句柄存储在全局变量中
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 
0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
   
if (!hWnd)
   
{
      
return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   
return TRUE;
}

在窗口处理函数中对ESC键进行处理:

switch (message)
{
case WM_KEYDOWN:
    
switch(wParam)
    
{
    
case VK_ESCAPE:
        
{
            HWND   hDesk;   
            RECT   rc;   
            hDesk   
=   GetDesktopWindow();   
            GetWindowRect(   hDesk,   
&rc   );   
            SetWindowLong(   hWnd,   GWL_STYLE,   WS_BORDER   );   
            SetWindowPos(   hWnd,   HWND_TOPMOST,   
0,   0,   rc.right,   rc.bottom,   SWP_SHOWWINDOW);
        }

        
break;
    }

return 0;
}

posted on   Phinecos(洞庭散人)  阅读(4143)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示