Как нарисовать знак позиции? - PullRequest
1 голос
/ 30 апреля 2011

Я пишу свой собственный текстовый элемент управления в C # для Winforms.

Одна вещь, которую я не могу понять: как нарисовать знак положения текста в различных размерах?

Text position sign

Ответы [ 2 ]

2 голосов
/ 30 апреля 2011

Это называется «карета».Функции winapi не заключены в winforms, вам придется их вызывать.Начните , читая здесь .Вы найдете код в моем ответе здесь .

0 голосов
/ 30 апреля 2011

Попробуйте это.

Я создал метод, который должен вызываться из обработчика рисования любого элемента управления, в котором вы рисуете. Для простоты я просто использовал саму форму. Возможно, у вас есть панель или какой-то другой элемент управления.

Метод принимает графический объект, масштаб курсора и верхнюю / левую позицию, где начинается рисование. Масштаб - только высота, но вся математика выполнена относительно высоты. Вы можете настроить эти цифры любым способом.

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        DrawCaret(e.Graphics, 30, new Point(20, 20));
        DrawCaret(e.Graphics, 50, new Point(100, 100));
    }

    private static void DrawCaret(Graphics g, int scale, Point loc)
    {
        g.SmoothingMode = SmoothingMode.HighQuality;

        int height = scale;
        int width = scale/10;
        int rectBase = scale/5;

        g.FillRectangle(Brushes.Black, loc.X, loc.Y, width, height);

        var path = new GraphicsPath();
        path.AddPolygon(new[]
                            {
                                new Point(loc.X+width, loc.Y),
                                new Point(loc.X+width+rectBase/2, loc.Y+rectBase/2),
                                new Point(loc.X+width, loc.Y+rectBase),
                            });
        g.FillPath(Brushes.Black, path);
    }

Этот образец производит следующий вывод:

sample

...