У меня есть многострочная текстовая строка (например, «Stuff \ nMore Stuff \ nYet More Stuff»), и я хочу нарисовать ее вместе с растровым изображением во всплывающей подсказке. Так как я рисую растровое изображение, мне нужно установить для OwnerDraw значение true, что я и делаю. Я также обрабатываю событие Popup, поэтому я могу изменить размер всплывающей подсказки так, чтобы он содержал текст и растровое изображение.
Я вызываю e.DrawBackground и e.DrawBorder (), а затем рисую свое растровое изображение в левой части области всплывающей подсказки.
Есть ли набор флагов, которые я могу передать e.DrawText (), чтобы выровнять текст по левому краю, но сместить его так, чтобы он не закрашивался на моем растровом изображении? Или мне нужно также отрисовать весь текст (что, вероятно, потребует разбиения строки на новые строки и т. Д.)?
ОБНОВЛЕНО: окончательный код выглядит так:
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);
}