绘制自定义十字光标仅绘制光标的一半

时间:2014-07-03 06:44:52

标签: c# wpf cursor

我试图绘制自定义十字光标。

这是我创建"交叉光标"。

的功能

问题是它只绘制正坐标。 所以我得到了十字架的一半。

enter image description here

所以当我画它时,这个十字架中的红色是不可见的。 一个解决方案是用正坐标制作十字架,但我不想要这个。

任何解决方案?

private Cursor crossCursor(System.Drawing.Pen pen, int x, int y)
{
    var pic = new Bitmap(x, y);
    var gr = Graphics.FromImage(pic);

    //gr.Clip = new Region(new RectangleF(-x / 2, -y / 2, x, y));

    var pathX = new GraphicsPath();
    var pathY = new GraphicsPath();
    pathY.AddLine(new Point(0, -y), new Point(0, y));
    pathX.AddLine(new Point(-x, 0), new Point(x, 0));
    gr.DrawPath(pen, pathX);
    gr.DrawPath(pen, pathY);

    var stream = new MemoryStream();
    Icon.FromHandle(pic.GetHicon()).Save(stream);

    // Convert saved file into .cur format
    stream.Seek(2, SeekOrigin.Begin);
    stream.WriteByte(2);
    stream.Seek(10, SeekOrigin.Begin);
    stream.Seek(0, SeekOrigin.Begin);

    // Construct Cursor
    return new Cursor(stream);
}

1 个答案:

答案 0 :(得分:1)

如果参数xy分别为10,那么您将在代码中创建一个10x10的位图。

所以这一行:

pathY.AddLine(new Point(0, -y), new Point(0, y));

转换为:

pathY.AddLine(new Point(0, -10), new Point(0, 10));

点(0,-10)位于位图之外,因此不可见。

如果您坚持使用负值,那么您无法在位图内绘制并显示所有内容......