我刚开始为 C# 应用程序开发 Winforms GUI,想知道以下是否可行?
我希望在图片框中显示一个大图像(很容易完成),然后当鼠标指针悬停在较大的图像上时,在鼠标位置的大图像上叠加第二个较小的图像。如果可能的话,我希望覆盖图像是部分透明的。
由于 GUI 设计处于早期阶段,我可以将其更改为 WPF,如果这会使我的要求变得更容易。
非常感谢,
安迪。
这是 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);
这在 WPF 中是微不足道的;只需<Image>
在<Canvas>
.
在 WinForms 中,您需要自己处理 PictureBox 的Paint
事件并绘制图像。