mehdi2004171
سه شنبه 21 دی 1389, 00:12 صبح
من مي خواهم در بعضي از مواقع از يک آيکون به جاي کرسر استفاده کنم پس از جستجو به دستورات زير رسيدم
public struct IconInfo
{
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
IconInfo tmp = new IconInfo();
GetIconInfo(bmp.GetHicon(), ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = true;
return new Cursor(CreateIconIndirect(ref tmp));
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
Bitmap bitmap = new Bitmap(64, 64);
Graphics g = Graphics.FromImage(bitmap);
Icon ico = new Icon(Application.StartupPath + @"\Call-red.ico");
g.DrawIcon(ico, 64, 64);
e.Graphics.DrawIcon(ico, 64, 64);
this.Cursor = CreateCursor(bitmap, 3, 3);
bitmap.Dispose();
}
اما دستورات بالا در زمان اجرا کرسر را که حالا ايکون جايگزين ان شده است نشان نمي دهد؟
چه اشکالي در دستورات وجود دارد آيا راه حلي ديگري نيز هست؟
public struct IconInfo
{
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
IconInfo tmp = new IconInfo();
GetIconInfo(bmp.GetHicon(), ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = true;
return new Cursor(CreateIconIndirect(ref tmp));
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
Bitmap bitmap = new Bitmap(64, 64);
Graphics g = Graphics.FromImage(bitmap);
Icon ico = new Icon(Application.StartupPath + @"\Call-red.ico");
g.DrawIcon(ico, 64, 64);
e.Graphics.DrawIcon(ico, 64, 64);
this.Cursor = CreateCursor(bitmap, 3, 3);
bitmap.Dispose();
}
اما دستورات بالا در زمان اجرا کرسر را که حالا ايکون جايگزين ان شده است نشان نمي دهد؟
چه اشکالي در دستورات وجود دارد آيا راه حلي ديگري نيز هست؟