1

Winforms 用の C# で独自のテキスト ボックス コントロールを作成しています。

私が理解できないことの1つは、テキスト位置記号をさまざまなサイズで描画する方法ですか?

テキスト位置記号

4

2 に答える 2

2

それは「キャレット」と呼ばれます。winapi 関数は winforms によってラップされていないため、pinvoke する必要があります。ここから読み始めてください。コードはこちらの回答にあります。

于 2011-04-30T16:39:57.533 に答える
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);
    }

このサンプルでは、​​次の出力が生成されます。

サンプル

于 2011-04-30T16:37:35.410 に答える