虽然问题标题似乎很愚蠢,但这并不是我所需要的。要用颜色填充整个区域,需要选择合适的画笔 - 这是微不足道的。但是我想用不同的颜色填充它的上半部分,并且用不同的颜色填充它的下半部分。如果它是正常(非圆形)矩形,我可以绘制两个矩形(使用不同的画笔)。但是对于RoundRect,我没有任何想法如何去做。
以下是我需要它:我使用RoundRect在我的图形可视化中绘制每个节点,并且这些节点应该有几个应该用不同颜色填充的隔间(单元格)。
我希望你明白我的意思:)。
答案 0 :(得分:3)
如果你必须使用传统的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);
}
从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);