2009-12-16 5 views
0

J'ai un rectangle arrondi que je fais comme siRemplissage d'un rectangle partiellement avec GDI Arrondi +

dc.RoundRect(textBorder, CPoint(20, 20)); 

Plus tard, je dessine une ligne à travers elle d'environ 1/3 de la descente.

dc.LineTo(textBorder.right, textBorder.top + 15); 

Maintenant, je voudrais remplir juste la partie au-dessus de la ligne avec une couleur unie. En d'autres termes, je dois remplir un rectangle partiellement arrondi, car le haut du rectangle est arrondi, mais le bas de celui-ci est tronqué par la ligne. Y a-t-il un moyen facile de faire ceci?

Répondre

2

Avez-vous essayé d'utiliser une combinaison de CreateRoundRectRegion puis de FillRgn pour remplir la zone non rectangulaire?

Ce l'exemple donné dans la documentation pour CreateRoundRectRegion:

CRgn rgnA, rgnB, rgnC; 

VERIFY(rgnA.CreateRoundRectRgn(50, 50, 150, 150, 30, 30)); 
VERIFY(rgnB.CreateRoundRectRgn(200, 75, 250, 125, 50, 50)); 
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50)); 

int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR); 
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION); 

CBrush brA, brB, brC; 
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); 
VERIFY(pDC->FillRgn(&rgnA, &brA));  // rgnA Red Filled 

VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); 
VERIFY(pDC->FillRgn(&rgnB, &brB));  // rgnB Green Filled 
VERIFY(brC.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue 
VERIFY(pDC->FrameRgn(&rgnC, &brC, 2, 2)); 

En général, quand vous voulez faire quelque chose avec des zones non-rectangulaires, vous devez commencer à chercher dans les régions.

+0

Je n'ai pas essayé mais je ne vois pas comment cela résoudra mon problème. Cela ne va-t-il pas créer des bords arrondis au fond de la région? –

+0

Maintenant que vous l'avez édité, je vois qu'il y a une fonction CombineRgn. Cela pourrait aider. –

+0

Je pense que c'est la bonne idée, mais le code est un peu confus. Ce que vous voulez faire est de créer une région qui est l'intersection d'un rectangle régulier avec votre arrondi. –

Questions connexes