0x4_窗口和窗口风格

什么是窗口?

  • 窗口是windows操作系统中用来显示信息和接收信息的基本单元。
  • 窗口管理器: 负责管理窗口相关功能的操作系统部件
  • 桌面窗口: windows操作系统初始化时生成的窗口。
  • 调用GetDesktopWindow函数可以获得桌面的窗口句柄(HWND)。
  • 桌面窗口会覆盖整个屏幕,其他窗口都在其之上显示。

窗口的标准风格

  • windows窗口风格:
  • 1、 重叠窗口 Overlapped – WS_OVERLAPPED
  • 2、 弹出窗口 Popup – WS_POPUP
  • 3、 子窗口 Child – WS_CHILD
  • 如果不指定任任何窗口类型,则生成重叠窗口

重叠窗口(顶级窗口)

  • WS_OVERLAPPED: 标题栏 + 边框
  • WS_OVERAPPEDWINDOW: 标题栏 + 边框大小 + 窗口菜单 + 最大最小化按钮

弹出窗口(顶级窗口)

什么是顶级窗口?连接桌面春观看的子窗口

  • 弹出窗口通常用于对话框或Message消息框
  • 他有 WS_POPUP风格 和 WS_CLIOSIBLINGS

子窗口(不是顶级窗口)

  • WS_CHILD,只能被分配到父窗口的客户区。
  • 子窗口必须要有客户区,父窗口可以是顶级窗口,也可以是子窗口。

窗口扩展风格

风格描述
WS_EX_DLGMODALFRAME双层边框
WS_EX_TOPMOST停留在所有非最高层窗口上面
WS_EX_ACCEPTFILES接受文件拖放

窗口的层次

在这里插入图片描述

  • 桌面窗口下面一层是顶层窗口。顶层窗口之下都是子窗口。
// 通过调用系统一系列的API函数遍历所有子窗口
void GetAllWindows()
{
  static int i = 0;
  // 1. 获得桌面窗口
  HWND hDesktop = GetDesktopWindow();

  // 2. 获得桌面第一个窗口GW_CHILD 只检查指定窗口的子窗口。它不检查子代窗口。
  // GetWindow函数检索与指定窗口具有指定关系(Z顺序或所有者)的窗口句柄。
  HWND hWnd = GetWindow(hDesktop, GW_CHILD);
  TCHAR szName[256]{};
  TCHAR szClass[256]{};


  while (hWnd != NULL)
  {
    memset(szName, 0, 256);
    memset(szClass, 0, 256);

    GetClassName(hWnd,szClass, 256);
    GetWindowText(hWnd, szName, 256);
    _tprintf_s(_T("窗口名:%s\t类名: %s\r\n"), szName,szClass);
    Sleep(1000);
    hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
    i++;
  }
  _tprintf_s(_T("%d"), i);
}
函数名功能
GetDesktopWindow获取桌面窗口句柄
GetWindow返回与指导窗口有特定关系的窗口句柄,GW_CLID获得子窗口
memset初始化缓冲区
GetWindowTest获得指定窗口标题
GetNextWindow返回Z-Order序中的前一个或后一个窗口句柄,GW_HWNDNEXT是获得后一个窗口句柄

Z顺序是什么?

  • 窗口在屏幕上显示时的先后顺序。在窗口链里的位置显示越靠前窗口显示时越靠前,这个前后顺序就是Z顺序
  • 可以用SetWIndowPos改变窗口的Z顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值