Если вы должны использовать устаревшую 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);
Используйте отсечение. IntersectClipRect() будет работать. Или используйте Paths, FillPath будет работать. –
Я бы сказал, что отсечение будет самым простым. Разделите область пополам и установите прямоугольник клипа в обработчике 'WM_PAINT'. Не уверен, почему Ганс не опубликовал это в качестве ответа. –