将儿童控制移至顶部

Moving a child control to top

本文关键字:顶部 控制      更新时间:2023-10-16

当它们在 Windows API 中重叠时,如何将控件移至另一个控制。

例如,我创建2个按钮 b1 b2

     HWND b1 = CreateWindow(L"BUTTON", L"button1", WS_CHILD | WS_VISIBLE | WS_TABSTOP,
    100, 100, 200, 50, my_Window_handle, (HMENU)100, NULL, NULL);
    HWND b2 = CreateWindow(L"BUTTON", L"button2", WS_CHILD | WS_VISIBLE | WS_TABSTOP,
    50, 100, 250, 50, my_Window_handle, (HMENU)101, NULL, NULL);

我想将B1移至B2或任何控件的顶部。我将函数 setWindowPos 用作

SetWindowPos(b1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

但ID无法正常工作。

您不希望孩子窗口最高,您希望它处于Z订单的顶部。这样:

SetWindowPos(b1, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

文档说HWND_TOP

将窗口放在z订单的顶部。

最上方将无法使用,因为子窗口必须与其parent的z订单保持在同一z ording和setWindowpos,并使用hwnd_topmmixt保持hwnd_insertafter将尝试更改它。您在这里唯一需要的是 WS_CLIPSIBLINGS ,然后 B1 将保留在 B2 的顶部。

 b1 = CreateWindow(L"BUTTON", L"button1", WS_CHILD | WS_VISIBLE | WS_TABSTOP,
100, 100, 200, 50, hWnd, (HMENU)100, NULL, NULL);
 b2 = CreateWindow(L"BUTTON", L"button2", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS, 50, 100, 250, 50, hWnd, (HMENU)101, NULL, NULL);

以及设置z订单,如果它们重叠,则需要在控件上设置WS_CLIPSIBLINGS样式,以阻止它们彼此绘制。