虽然问题标题看起来很愚蠢,但这并不是我所需要的。为了用颜色填充整个区域,需要选择合适的画笔 - 这很简单。但我想用不同的颜色填充它的上半部分,用不同的颜色填充它的下半部分。如果它是普通(非圆形)矩形,我可以绘制两个矩形(使用不同的画笔)。但对于 RoundRect 我不知道如何做到这一点。
这就是我需要它的用途:我使用 RoundRect 绘制图形可视化中的每个节点,这些节点应该有几个应填充不同颜色的隔间(单元格)。
我希望你明白我的意思:)
如果您必须使用旧版 GDI 而不是 GDI+,这里我为您编写了一个函数来根据您的需要绘制这样的(单元格)我希望它是您所期望的!
基本思想是创建上部和下部区域(它们都是完全重叠的圆角矩形,然后每个区域的一半被切掉)

我准备了上面的插图来展示如何生产电池。它仅适用于上侧,但您应该已经有了创建下侧的想法。
这是一个用于创建您需要的单元格的包装函数:
void DrawCell(HDC& hdc, const RECT& rcTarget,const HBRUSH& hbrUpper, const HBRUSH& hbrLower)
{
HRGN hRgnUpper = CreateRoundRectRgn(rcTarget.left, rcTarget.top, rcTarget.right, rcTarget.bottom, 42, 38);
HRGN hRgnLower = CreateRoundRectRgn(rcTarget.left, rcTarget.top, rcTarget.right, rcTarget.bottom, 42, 38);
HRGN hRgnCutFromUpper = CreateRectRgn(rcTarget.left, rcTarget.top + ((rcTarget.bottom - rcTarget.top) / 2), rcTarget.right, rcTarget.bottom);
HRGN hRgnCutFromLower = CreateRectRgn(rcTarget.left, rcTarget.top , rcTarget.right, rcTarget.bottom - ((rcTarget.bottom - rcTarget.top) / 2));
CombineRgn(hRgnUpper, hRgnUpper,hRgnCutFromUpper, RGN_DIFF);
CombineRgn(hRgnLower, hRgnLower,hRgnCutFromLower, RGN_DIFF);
FillRgn( hdc, hRgnUpper, hbrUpper);
FillRgn( hdc, hRgnLower, hbrLower);
DeleteObject(hRgnCutFromLower);
DeleteObject(hRgnCutFromUpper);
DeleteObject(hRgnLower);
DeleteObject(hRgnUpper);
}
Run Code Online (Sandbox Code Playgroud)
从 WM_PAINT 处理程序中调用此函数:
RECT rcTarget;
rcTarget.left = 20;
rcTarget.top = 20;
rcTarget.right = 275;
rcTarget.bottom = 188;
HBRUSH hRed = CreateSolidBrush( RGB(255, 0, 0) );
HBRUSH hGreen = CreateSolidBrush( RGB(0, 255, 0) );
DrawCell(hdc, rcTarget, hRed, hGreen);
Run Code Online (Sandbox Code Playgroud)