创建Microsoft鼠标和键盘样式选择

时间:2013-08-13 09:08:13

标签: c# mouse

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

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

enter image description here

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

我理解C#/ Visual Studio可能不是最好的方法。但是我并不是真的想要任何重要的东西。实际上,能够将一个图像叠加在另一个图像上并检测到鼠标就可以了。

什么是好方法,甚至只是我能做到的一种方式,最好不用直接编码? (即能够将其放置并放置在设计师中,然后编码其可见性和其他所有内容)

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

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

1 个答案:

答案 0 :(得分:1)

使用PictureBoxes。您可以在设计时放置它们,它们具有鼠标悬停,单击等事件。在特定的鼠标操作上更改它的图像。在这个例子中,我只是将它设置为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;
    }
}