SetParent后子窗口变透明了 一般是什么问题 写出解决的代码
时间: 2024-01-02 21:05:13 浏览: 110
可能是因为子窗口的样式设置不正确导致的。可以尝试在 `SetParent` 后设置子窗口的样式为 WS_CHILD | WS_VISIBLE,并重新设置背景色。
代码示例:
```
HWND hWndChild = ...; // 子窗口句柄
HWND hWndParent = ...; // 父窗口句柄
// 设置子窗口父窗口为 hWndParent
::SetParent(hWndChild, hWndParent);
// 设置子窗口样式为 WS_CHILD | WS_VISIBLE
::SetWindowLong(hWndChild, GWL_STYLE, WS_CHILD | WS_VISIBLE);
// 重新设置背景色
::SetClassLong(hWndChild, GCL_HBRBACKGROUND, (LONG)::GetStockObject(WHITE_BRUSH));
::InvalidateRect(hWndChild, NULL, TRUE);
```
这样应该可以解决子窗口变透明的问题。
相关问题
SetParent后子窗口看不见了 一般是什么问题 写出解决的代码
子窗口看不见的问题可能是由于以下原因导致的:
1. 子窗口的位置或大小与父窗口不匹配;
2. 子窗口的可见性属性未被正确设置。
以下是解决子窗口看不见问题的代码示例:
```c++
// 获取父窗口句柄
HWND hwndParent = GetParent(hwndChild);
// 设置父窗口句柄
SetParent(hwndChild, hwndNewParent);
// 调整子窗口的位置和大小
RECT rc;
GetClientRect(hwndNewParent, &rc);
SetWindowPos(hwndChild, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER);
// 确保子窗口可见
ShowWindow(hwndChild, SW_SHOW);
```
在这个示例中,我们首先获取了子窗口的父窗口句柄,然后使用SetParent函数将子窗口设置为一个新的父窗口。接着,我们使用GetClientRect函数获取新的父窗口客户区域的大小,并使用SetWindowPos函数调整子窗口的位置和大小,使其与新的父窗口相匹配。最后,我们使用ShowWindow函数确保子窗口可见。
SetParent后子窗口看不见了
在使用SetParent函数将一个窗口设置为另一个窗口的子窗口后,可能会遇到子窗口看不见的问题。这可能是因为子窗口的位置或大小与父窗口不匹配所导致的。你可以尝试在调用SetParent函数之前设置子窗口的位置和大小,使其与父窗口相匹配,或者在调用SetParent函数之后调用MoveWindow函数重新设置子窗口的位置和大小。此外,还应该确保子窗口的可见性属性被正确地设置为可见。
阅读全文