SetWindowPos 如何影响所有者窗口的 Z 顺序?

use*_*751 4 windows winapi

SetWindowPos函数接受以下标志:

SWP_NOOWNERZORDER (0x0200)
不改变所有者窗口在 Z 顺序中的位置。

什么确实SetWindowPos功能做主人窗口在Z顺序中的位置,如果不通过这个标志?

Rit*_*Han 7

如果不传递此标志,SetWindowPos 函数对 Z 顺序中所有者窗口的位置有何作用?

以将拥有的窗口放置在 Z 顺序的底部为例。共有三个窗口:Owned、TestWindowPos(所有者)和 New Tab Chrome 窗口(作为参考)。

测试代码段:

   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   HWND hWndOwned = CreateWindowW(szWindowClass, L"Owned", WS_OVERLAPPEDWINDOW,
       0, 0, 500, 500, hWnd, nullptr, hInstance, nullptr);

   ShowWindow(hWndOwned, nCmdShow);
   UpdateWindow(hWndOwned);

   SetWindowPos(hWndOwned, HWND_BOTTOM, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
Run Code Online (Sandbox Code Playgroud)

SWP_NOOWNERZORDER标志设置,你可以从下面的快照中看到的是,它把所有的窗口在底部,但让车主时刻不变。

在此处输入图片说明

SWP_NOOWNERZORDER标志设置时,您可以从以下快照中看到它更改了拥有窗口的 z-order 以及所有者窗口的.

在此处输入图片说明