将子控件移到顶部

时间:2016-06-16 13:43:05

标签: c++ winapi

如果控件在 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无效。

3 个答案:

答案 0 :(得分:2)

您不希望子窗口位于最顶层,您希望它位于z顺序的顶部。像这样:

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

HWND_TOP代表unsigned char

  

将窗口置于Z顺序的顶部。

答案 1 :(得分:1)

除了设置z顺序之外,还需要在控件上设置WS_CLIPSIBLINGS样式(如果它们重叠),以阻止它们在彼此的顶部绘制。

答案 2 :(得分:0)

Topmost在这里不起作用,因为子窗口必须与其父窗口保持相同的z顺序,而使用HWND_TOPMOST保持与SetWindowPos相同,因为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);