如何绘制位置标志?

时间:2011-04-30 16:25:46

标签: c# .net winforms textbox ownerdrawn

我在C#for Winforms中编写自己的文本框控件。

我无法弄清楚的一件事:如何以各种尺寸绘制文字位置标志?

Text position sign

2 个答案:

答案 0 :(得分:2)

它被称为'插入符号'。 winapi函数不是由winforms包裹的,你必须将它们包围起来。开始reading here。您可以在我的回答here中找到代码。

答案 1 :(得分:0)

试试这个。

我创建了一个方法,它可以从你正在绘制的控件的绘制处理程序中调用。为简单起见,我只是在我的表单中使用了表单。你可能有一个面板或一些其他控件。

该方法接受图形对象,光标的比例以及开始绘制的位置的上/左位置。比例只是高度,但所有数学都是相对于高度执行的。您可以按照自己想要的方式调整这些数字。

    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