-3

我正在制作一个与键绑定相关的应用程序 - 因此我希望拍摄鼠标的图像,并在所述鼠标上覆盖按钮的轮廓以显示键(我也希望使用控制器和键盘来执行此操作,但它应该和用鼠标做的一样)

实际上,我正在寻找类似于 Microsoft 鼠标和键盘程序的东西:

在此处输入图像描述

在该图像中看不到鼠标光标,但它位于鼠标右键上 - 因此它选择/突出显示了整个按钮及其绑定。

我了解 C#/Visual Studio 可能不是最好的方法。但是,我真的不想要任何特别花哨的东西。事实上,能够将一个图像覆盖在另一个图像上并检测到鼠标悬停就可以了。

什么是好方法,甚至只是我可以做到这一点的方法,最好不必直接编码?(即能够在设计器中放置和定位它,然后编码它的可见性和所有其余部分)

我尝试使用 Visual Basic Powerpacks 图形,但它们似乎只提供基本的预定义形状(在这种情况下我使用矩形),因此当放在鼠标按钮上时它们看起来不合适

我也尝试过使用带有 2 张图像的图像框(根据 Hans Passant 的建议)但是我无法让图像框考虑图像的透明度

4

1 回答 1

1

使用图片框。您可以在设计时放置它们,并且它们具有鼠标悬停、单击等事件。在特定的鼠标操作上更改它的图像。在此示例中,我只是将其设置为 null,但您明白了:

    Image picImage = null;  // to store original image     

    private void pictureBox1_MouseLeave(object sender, EventArgs e)
    {
        pictureBox1.Image = picImage;   // rest original image
    }

    private void pictureBox1_MouseEnter(object sender, EventArgs e)
    {
        picImage = pictureBox1.Image;   // remember the original image
        pictureBox1.Image = null;   // change the current image
    }

更新:

好的,要进行像素完美选择,只需在同一位置使用两个 PictureBox,一个显示未选择的图像(pictureBox1),一个显示选定的图像(pictureBox2)。使pictureBox1 不可见。然后,当您的鼠标悬停在图像的透明/非透明区域上时,使用此代码显示/隐藏它们:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    Bitmap b = new Bitmap(pictureBox1.Image);
    Color color = b.GetPixel(e.X, e.Y);

    if (color.A != 0)
    {
        pictureBox1.Visible = false;
        pictureBox2.Visible = true;
    }
}

private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
{
    Bitmap b = new Bitmap(pictureBox1.Image);
    Color color = b.GetPixel(e.X, e.Y);

    if (color.A == 0)
    {
        pictureBox2.Visible = false;
        pictureBox1.Visible = true;
    }
}
于 2013-08-13T09:22:38.590 回答