2014-07-03 90 views
0

我正在嘗試繪製自定義十字準線光標。繪製自定義十字準線光標只繪製光標的一半

這是我創建「十字光標」的函數。

問題是它只繪製正座標。 所以我得到了十字架的一半。

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

爲什麼不能使用正向座標? – Sayse

+0

如果我使用正座標,問題是我的光標的實際hitPoint將是十字的最左端而不是中間的。 – dg90

+0

生命點與您的繪圖代碼無關,[請參閱此問題](http://stackoverflow.com/q/11526351/1324033)或[msdn](http://msdn.microsoft.com/zh-cn/ -us/library/0b1674x8.aspx) – Sayse

回答

1

如果參數xy是,比如說,每組10,你會在你的代碼中創建10×10的位圖。

所以這行:

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

翻譯爲:

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

點(0,-10)位於您的位圖之外,因此將不可見。

如果您堅持使用負值,您無法在位圖內繪製並顯示所有內容...

+0

原來我的代碼是-y/2和y/2,所以它們是一樣的。這並不能解決問題 – dg90

+0

如果我使用正座標,問題是我的光標的實際hitPoint將是十字的最左端而不是中間。 – dg90

+1

您可以在.NET中更改自定義光標的熱點。參見[這個問題的接受答案](http://stackoverflow.com/questions/550918/change-cursor-hotspot-in-winforms-net)。 –