J'ai une chaîne de texte multiligne (par exemple "Stuff \ nPlus Stuff \ nYet More Stuff"), et je veux la peindre, avec une image bitmap dans une info-bulle. Comme je peins l'image bitmap, je dois définir OwnerDraw sur true, ce que je fais. Je gère également l'événement Popup, donc je peux dimensionner l'info-bulle pour qu'elle soit assez grande pour contenir le texte et le bitmap.Alignement du texte sur l'infobulle de OwnerDraw en C#/.NET
J'appelle e.DrawBackground et e.DrawBorder(), puis peindre mon bitmap sur le côté gauche de la zone d'info-bulle.
Existe-t-il un ensemble de drapeaux que je peux passer à e.DrawText() pour aligner le texte à gauche, mais le décaler pour qu'il ne soit pas peint sur mon bitmap? Ou ai-je besoin de dessiner tout le texte sur mesure (ce qui impliquera probablement de scinder la chaîne sur les retours à la ligne, etc.)?
MISE À JOUR: Le code final ressemble à ceci:
private void _ItemTip_Draw(object sender, DrawToolTipEventArgs e)
{
e.DrawBackground();
e.DrawBorder();
// Reserve a square of size e.Bounds.Height x e.Bounds.Height
// for the image. Keep a margin around it so that it looks good.
int margin = 2;
Image i = _ItemTip.Tag as Image;
if (i != null)
{
int side = e.Bounds.Height - 2 * margin;
e.Graphics.DrawImage(i, new Rectangle(margin, margin, side, side));
}
// Construct bounding rectangle for text (don't want to paint it over the image).
int textOffset = e.Bounds.Height + 2 * margin;
RectangleF rText = e.Bounds;
rText.Offset(textOffset, 0);
rText.Width -= textOffset;
e.Graphics.DrawString(e.ToolTipText, e.Font, Brushes.Black, rText);
}