0

我刚开始为 C# 应用程序开发 Winforms GUI,想知道以下是否可行?

我希望在图片框中显示一个大图像(很容易完成),然后当鼠标指针悬停在较大的图像上时,在鼠标位置的大图像上叠加第二个较小的图像。如果可能的话,我希望覆盖图像是部分透明的。

由于 GUI 设计处于早期阶段,我可以将其更改为 WPF,如果这会使我的要求变得更容易。

非常感谢,

安迪。

4

2 回答 2

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);
于 2012-04-22T19:09:42.830 回答
2

这在 WPF 中是微不足道的;只需<Image><Canvas>.

在 WinForms 中,您需要自己处理 PictureBox 的Paint事件并绘制图像。

于 2012-04-22T18:10:07.653 回答