我刚刚开始为C#应用程序开发Winforms GUI,并想知道以下是否可能?
我希望在图片框中显示大图像(轻松完成),然后在鼠标指针位于较大图像上方时,在鼠标位置的大图像上覆盖第二个较小的图像。如果可能的话,我希望叠加图像部分透明。
由于GUI设计处于早期阶段,我可以将其更改为WPF,如果这样可以让我更容易理解。
非常感谢,
安迪。
答案 0 :(得分:4)
这是Winforms中的一个单行程序,只需更改PictureBox.Cursor属性:
pictureBox1.Cursor = new Cursor(new MemoryStream(Properties.Resources.ExampleCursor));
如果您需要任意图像,则需要将位图转换为光标。一个小帮手功能:
using System.Reflection;
...
private static Cursor CursorFromBitmap(Bitmap bmp) {
var hicon = bmp.GetHicon();
var cursor = new Cursor(hicon);
var fi = typeof(Cursor).GetField("ownHandle", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue(cursor, true);
return cursor;
}
使用一些反射技巧来避免必须跟踪句柄并明确地销毁它。像这样使用它:
pictureBox1.Cursor = CursorFromBitmap(Properties.Resources.ExampleImage);
答案 1 :(得分:2)
这在WPF中是微不足道的;只需在<Image>
中生成第二个<Canvas>
。
在WinForms中,您需要处理PictureBox的Paint
事件并自行绘制图像。