什么是窗口?
- 窗口是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 | 接受文件拖放 |
窗口的层次
- 桌面窗口下面一层是顶层窗口。顶层窗口之下都是子窗口。
void GetAllWindows()
{
static int i = 0;
HWND hDesktop = GetDesktopWindow();
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顺序