C#Winforms。将鼠标指针上的较小图像叠加到Picture Box上

时间:2012-04-22 18:04:47

标签: c# winforms overlay

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

我希望在图片框中显示大图像(轻松完成),然后在鼠标指针位于较大图像上方时,在鼠标位置的大图像上覆盖第二个较小的图像。如果可能的话,我希望叠加图像部分透明。

由于GUI设计处于早期阶段,我可以将其更改为WPF,如果这样可以让我更容易理解。

非常感谢,

安迪。

2 个答案:

答案 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事件并自行绘制图像。