我想用我的wacom绘图板在画布上画点东西。我写了一些代码,我可以用鼠标画得很好。但是,用wacom绘图板,它只是有时工作,而且速度较慢。问题是OnMouseDown事件,它只是在相当长的时间延迟后才被检测到。
下面是我的代码:
public partial class MainWindow : Window
{
private Polyline myPolyline;
private Boolean isMouseDown;
public MainWindow()
{
InitializeComponent();
}
private void OnMouseDown(object sender, MouseButtonEventArgs e)
{
isMouseDown = true;
Point p = e.GetPosition(mycanvas);
myPolyline = new Polyline();
myPolyline.Stroke = System.Windows.Media.Brushes.SlateGray;
myPolyline.StrokeThickness = 2;
myPolyline.FillRule = FillRule.EvenOdd;
PointCollection myPointCollection = new PointCollection();
myPointCollection.Add(p);
myPolyline.Points = myPointCollection;
mycanvas.Children.Add(myPolyline);
}
private void OnMouseUp(object sender, MouseButtonEventArgs e)
{
isMouseDown = false;
}
private void OnMouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(mycanvas);
if (!isMouseDown)
{
return;
}
myPolyline.Points.Add(p);
}
}
下面是xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel>
<Canvas Background="Azure" x:Name="mycanvas" Width="800" Height="450" MouseDown="OnMouseDown" MouseUp="OnMouseUp" MouseMove="OnMouseMove" ></Canvas>
</StackPanel>
1条答案
按热度按时间xmd2e60i1#
您的代码正在使用MouseButtonEventArgs和MouseEventArgs,而不是Wacom特定的事件参数类型。
您可以尝试用Wacom提供的API替换现有的鼠标事件处理程序。
Wacom在多个平台上提供专用API,允许您直接访问Wacom数位板。
例如,在Windows上,您可以使用Wacom提供的Ink API访问Wacom图形输入板。
此API提供与Wacom绘图板相关的所有事件和数据。使用Ink API可以帮助您更快地响应Wacom绘图板事件,并使用更精确的数据来控制画笔。
也许你可以参考这个link。