如果之前有人询问我很抱歉,我试图搜索并找不到任何内容。
我正在创建一个C#WPF应用程序。
我有一张图片,例如一个男人。
有没有办法检测鼠标点击的男性身体部位?例如,如果鼠标点击他的手,我们会收到一个消息框:“你已经点击了手”?
我想将其划分为随机形状而不仅仅是矩形,因此鼠标点击必须精确。
非常感谢您的帮助
答案 0 :(得分:3)
如果我是你,我会在图像顶部创建多个多边形,并将其设置为正确的位置/形状,然后使它们透明并处理每个多边形的点击事件。
答案 1 :(得分:2)
当然,没问题。
使用XAML:
<Border BorderBrush="Gray"
BorderThickness="1"
Height="200" Width="200"
MouseMove="Border_MouseMove">
<TextBlock Name="Jerry" />
</Border>
做这样的事情:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Border_MouseMove(object sender, MouseEventArgs e)
{
var _Control = (sender as System.Windows.Controls.Border);
var _ControlLocation = _Control.PointToScreen(new Point(0, 0));
var _MousePosition = MouseInfo.GetMousePosition();
var _RelativeLocation = _MousePosition - _ControlLocation;
this.Jerry.Text = _RelativeLocation.ToString();
}
}
internal class MouseInfo
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.Bool)]
internal static extern bool GetCursorPos(ref Win32Point pt);
[System.Runtime.InteropServices.StructLayout(
System.Runtime.InteropServices.LayoutKind.Sequential)]
internal struct Win32Point
{
public Int32 X;
public Int32 Y;
};
public static Point GetMousePosition()
{
Win32Point w32Mouse = new Win32Point();
GetCursorPos(ref w32Mouse);
return new Point(w32Mouse.X, w32Mouse.Y);
}
}
我解除了一些代码:Location of WPF control in window?显然你想要使用与边框不同的东西 - 你想要一个图像。而你想要MouseDown而不是MouseMove。但这是你需要的逻辑!
要完成这项工作,您需要知道自定义图像上的X和Y(例如,“头部”或“手臂”的位置)。如果截面不是矩形,您将需要计算多边形。如果他们是,那么这应该让你90%。
祝你好运!
答案 2 :(得分:1)
您可以将图像裁剪成单独的部分,然后将它们加载到窗口中,就好像它是完整的图像一样。这不是最有效的方式,它只适用于静态图像(Flash视频非常适合动画“图像”),但它可以快速轻松地实现。如果您要使用HTML,则窗口必须使用Web浏览器工具箱项(除非您以某种方式编写自己的代码)。