只有边框不是透明的,其他都变透明
时间: 2023-10-30 07:04:48 浏览: 45
如果您需要使边框不透明,而填充部分透明,可以使用带有透明度的画刷对象来实现。具体的步骤如下:
1. 调用 CreateSolidBrush 或者 CreatePatternBrush 函数创建一个画刷对象,其中 CreateSolidBrush 函数可以创建一个纯色的画刷,CreatePatternBrush 函数可以创建一个图案填充的画刷。
2. 使用 SetBkMode 函数将 HDC 的背景模式设置为 TRANSPARENT,这将使得绘制的文本或图形填充部分透明。
3. 使用 SetTextColor 函数设置文本的颜色。
4. 使用 SelectObject 函数将画刷对象选入 HDC 中。
5. 调用相应的绘图函数,如 Rectangle、Ellipse 等,使用 HDC 进行绘制,填充颜色将会变为画刷对象所指定的颜色或图案,而边框则会保持不透明。
下面是一段示例代码:
```c++
HDC hdc = GetDC(hwnd); // 获取窗口的 HDC
// 创建一个红色的画刷,带有 50% 的透明度
HBRUSH hBrush = CreateSolidBrush(COLORREF(0x80FF0000));
// 将画刷选入 HDC
HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
// 设置背景模式为透明
SetBkMode(hdc, TRANSPARENT);
// 设置文本颜色为白色
SetTextColor(hdc, RGB(255, 255, 255));
// 绘制一个矩形
Rectangle(hdc, 100, 100, 200, 200);
// 恢复原来的画刷
SelectObject(hdc, hOldBrush);
// 删除创建的画刷
DeleteObject(hBrush);
// 释放 HDC
ReleaseDC(hwnd, hdc);
```
在上面的代码中,我们首先创建了一个带有 50% 透明度的红色画刷,然后将其选入 HDC 中。接着,我们将 HDC 的背景模式设置为透明,并将文本颜色设置为白色。最后,我们使用 Rectangle 函数绘制一个矩形,这个矩形的填充部分将会变为半透明的红色,而边框则会保持不透明。最后,我们恢复原来的画刷,并删除创建的画刷,释放 HDC。