gpt4 book ai didi

c++ - 如何使创建的没有 WS_VISIBLE 的 Win32 控件可见?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:58 25 4
gpt4 key购买 nike

假设 hCtl没有 WS_VISIBLE 标志创建的控件的句柄,例如:

HWND hCtl = CreateWindowEx(0, WC_STATIC, L"some text",
WS_CHILD | SS_NOTIFY, // no WS_VISIBLE flag
0, 0, 0, 0, hWndParent, (HMENU)IDC_STATIC1, g_hInst, 0);

是否有比以下更直接的方法使其可见?

void make_visible(HWND hCtl, HWND hWndParent) {
SetWindowLongPtr(hCtl, GWL_STYLE,
GetWindowLongPtr(hCtl, GWL_STYLE) | WS_VISIBLE);
RECT rc{};
GetClientRect(hCtl, &rc);
MapWindowRect(hCtl, hWndParent, &rc);
InvalidateRect(hWndParent, &rc, TRUE);
UpdateWindow(hWndParent);

//ShowWindow(hCtl, SW_SHOW); // no use: does not update window
//SetWindowPos(hCtl, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); // no use: does not update window
}

最佳答案

要使子控件可见,请像这样调用 SetWindowPos:

SetWindowPos(hCtl, 0, 0, 0, 0, 0, 
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);

您调用 MapWindowRectInvalidateRectUpdateRect 等的代码应该被删除。

也许您遇到的真正问题是您创建了宽度和高度为零的静态控件。

关于c++ - 如何使创建的没有 WS_VISIBLE 的 Win32 控件可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47011580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com