基类提供了丰富的用户体验特性imageview.
公共摘要类ImageViewerInteractiveMode
公共mustlinherit类ImageViewerInteractiveMode
公共ref类ImageViewerInteractiveMode摘要
ImageViewerInteractiveMode与InteractiveService对象的imageview当用户使用鼠标或触摸与查看器交互时,提供丰富的用户界面体验。
ImageViewerInteractiveMode是一个基抽象类:从它可以派生自己的类来处理与查看器的自定义交互。有关LEADTOOLS提供的开箱即用模式的更多信息和列表,请参阅图像查看器交互模式.
ImageViewerInteractiveMode具有以下功能:
成员 | 描述 |
---|---|
WorkingCursor,IdleCursor和HitTestStateCursor | 当交互模式处于空闲、工作或命中测试状态时使用的光标(适用于桌面浏览器)。 |
MouseButtons |
附加到此模式的鼠标按钮(用于桌面浏览器) |
要使用交互模式,您可以创建任何派生类的实例,并使用以下方法之一将其分配给查看器:
imageview。DefaultInteractiveMode:将交互模式分配给桌面浏览器的鼠标左键或支持触摸的设备上的默认触摸事件。
imageview。InteractiveModes:向查看器添加多个交互模式。
的事件附加侦听器InteractiveService根据用户输入执行操作。集InteractiveEventArgs。IsHandled来真正的将事件标记为已处理,以便其他交互模式也不会响应该事件。
您可以同时使用多种交互模式。例如,使用下面的代码来支持用鼠标左键平移/缩放和用右键放大玻璃:
这个例子将创建一个自定义ImageViewerInteractiveMode这将在用户点击或触摸和拖动查看器时旋转图像。
使用Leadtools;
使用Leadtools.Controls;
使用Leadtools.Codecs;
使用Leadtools.Drawing;
使用Leadtools.ImageProcessing;
使用Leadtools.ImageProcessing.Color;
私人类TransformInteractiveMode: ImageViewerInteractiveMode
{
公共TransformInteractiveMode ():
基地()
{
这.AutoItemMode = ImageViewerAutoItemMode.AutoSet;
}
私人Keys _scaleKeyModifier = Keys. control;
公共虚拟键ScaleKeyModifier
{
得到{返回_scaleKeyModifier;}
集
{
//支持none和any修饰符
开关(值)
{
情况下钥匙。没有:
情况下钥匙。Alt:
情况下钥匙。转变:
情况下钥匙。控制:
_scaleKeyModifier = value;
打破;
默认的:
扔新ArgumentException (“无效的价值”,“ScaleKeyModifier”);
}
}
}
私人Keys _rotateKeyModifier = Keys. alt;
公共虚拟键RotateKeyModifier
{
得到{返回_rotateKeyModifier;}
集
{
//支持none和any修饰符
开关(值)
{
情况下钥匙。没有:
情况下钥匙。Alt:
情况下钥匙。转变:
情况下钥匙。控制:
_rotateKeyModifier = value;
打破;
默认的:
扔新ArgumentException (“无效的价值”,“PageKeyModifier”);
}
}
}
公共覆盖字符串名字
{
得到{返回“转换”;}
}
公共覆盖intId
{
得到{返回ImageViewerInteractiveMode。UserModeId + 3;}
}
公共覆盖无效开始(imageview imageview)
{
基地.Start (imageview);
var服务=基地.InteractiveService;
//平移所需事件
服务。DragStarted + =新EventHandler < InteractiveDragStartedEventArgs > (service_DragStarted);
服务。DragDelta + =新EventHandler < InteractiveDragDeltaEventArgs > (service_DragDelta);
服务。DragCompleted + =新EventHandler < InteractiveDragCompletedEventArgs > (service_DragCompleted);
服务。DoubleTap + =新EventHandler < InteractiveEventArgs > (service_DoubleTap);
}
公共覆盖无效停止(imageview imageview)
{
如果(IsStarted)
{
var服务=基地.InteractiveService;
服务。DragStarted - =新EventHandler < InteractiveDragStartedEventArgs > (service_DragStarted);
服务。DragDelta - =新EventHandler < InteractiveDragDeltaEventArgs > (service_DragDelta);
服务。DragCompleted - =新EventHandler < InteractiveDragCompletedEventArgs > (service_DragCompleted);
服务。DoubleTap - =新EventHandler < InteractiveEventArgs > (service_DoubleTap);
基地鸡毛蒜皮(imageview);
}
}
私人无效service_DragStarted (对象发送者:InteractiveDragStartedEventArgs
{
//确保pinch没有工作,否则,忽略pan
如果(!这.CanStartWork (e))
返回;
//确保我们在一个项目上
如果(这.Item = =零)
返回;
e.IsHandled =真正的;
这.OnWorkStarted (EventArgs.Empty);
}
私人无效service_DragDelta (对象发送器:InteractiveDragDeltaEventArgs
{
如果(!这.IsWorking)
返回;
var项=这.Item;
如果(项目= =零)
返回;
//找出该做什么
vardx = e.Change.X;
vardy = e.Change.Y;
如果(dx == 0 && dy == 0)
返回;
varscaleKeyModifier =这.ScaleKeyModifier;
varrotateKeyModifier =这.RotateKeyModifier;
varscale =(控制。ModifierKeys& scaleKeyModifier) == scaleKeyModifier;
varrotate =(控制。ModifierKeys& rotateKeyModifier) == rotateKeyModifier;
varimageview =这.ImageViewer;
如果(规模)
{
Scale(imageViewer, item, dy, e.Origin);
}
其他的如果(旋转)
{
旋转(imageViewer, item, dx, e.Origin);
}
其他的
{
翻译(imageViewer, item, dx, dy);
}
e.IsHandled =真正的;
}
私人无效service_DragCompleted (对象发送者:InteractiveDragCompletedEventArgs
{
如果(!这.IsWorking)
返回;
e.IsHandled =真正的;
OnWorkCompleted (EventArgs.Empty);
}
私人无效service_DoubleTap (对象发送器,InteractiveEventArgs
{
//确保我们没有工作
如果(这正在工作|| !这.CanStartWork (e))
返回;
//确保我们有一个项目
var项=这.Item;
如果(项目= =零)
返回;
e.IsHandled =真正的;
这.OnWorkStarted (EventArgs.Empty);
身份(这.ImageViewer、项);
这.OnWorkCompleted (EventArgs.Empty);
}
私人无效标识(ImageViewer ImageViewer, ImageViewerItem项)
{
项。变换= LeadMatrix.Identity;
}
私人无效缩放(ImageViewer ImageViewer, ImageViewerItem项,intdy,引点位置)
{
/ /……
//设置比例代码
/ /……
}
私人无效旋转(ImageViewer ImageViewer ImageViewerItem项,intdx,领点位置)
{
/ /……
//设置旋转代码
/ /……
}
私人无效翻译(ImageViewer ImageViewer ImageViewerItem项,intdx,intdy)
{
/ /……
//设置翻译代码
/ /……
}
}
公共无效ImageViewerInteractiveMode_Example ()
{
_imageViewer.InteractiveModes.BeginUpdate ();
_imageViewer.InteractiveModes.Add (新TransformInteractiveMode {IsEnabled =假});
/ /……
/ /……
/ /……
_imageViewer.InteractiveModes.EndUpdate ();
}
进口Leadtools
进口Leadtools。控制
进口Leadtools。编解码器
进口Leadtools。画
进口Leadtools。ImageProcessing
进口Leadtools.ImageProcessing.Color
私人类TransformInteractiveMode:继承了ImageViewerInteractiveMode
公共子新()
MyBase.新()
我. autoitemmode = ImageViewerAutoItemMode。AutoSet
结束子
私人_scaleKeyModifier作为钥匙=钥匙。控制
公共重写的财产ScaleKeyModifier ()作为键
得到
返回_scaleKeyModifier
结束得到
集(值作为键)
'支持none和any修饰符
选择情况下价值
情况下钥匙。没有,钥匙。Alt键。转变,钥匙。控制
_scaleKeyModifier = value
情况下其他的
扔新ArgumentException (“无效的价值”,“ScaleKeyModifier”)
结束选择
结束集
结束财产
私人_rotateKeyModifier作为钥匙=钥匙。Alt
公共重写的财产RotateKeyModifier ()作为键
得到
返回_rotateKeyModifier
结束得到
集(值作为键)
'支持none和any修饰符
选择情况下价值
情况下钥匙。没有,钥匙。Alt键。转变,钥匙。控制
_rotateKeyModifier = value
情况下其他的
扔新ArgumentException (“无效的价值”,“PageKeyModifier”)
结束选择
结束集
结束财产
公共覆盖只读的财产名称()作为字符串
得到
返回“转换”
结束得到
结束财产
公共覆盖只读的财产Id ()作为整数
得到
返回ImageViewerInteractiveMode。UserModeId + 3
结束得到
结束财产
公共覆盖子开始(按值传递imageview作为imageview)
MyBase.Start (imageview)
昏暗的服务作为InteractiveService =MyBase.InteractiveService
' Pan所需事件
AddHandler服务。DragStarted,AddressOfservice_DragStarted
AddHandler服务。DragDelta,AddressOfservice_DragDelta
AddHandler服务。DragCompleted,AddressOfservice_DragCompleted
AddHandler服务。DoubleTap,AddressOfservice_DoubleTap
结束子
公共覆盖子(停止) (按值传递imageview作为imageview)
如果IsStarted然后
昏暗的服务作为InteractiveService =MyBase.InteractiveService
RemoveHandler服务。DragStarted,AddressOfservice_DragStarted
RemoveHandler服务。DragDelta,AddressOfservice_DragDelta
RemoveHandler服务。DragCompleted,AddressOfservice_DragCompleted
RemoveHandler服务。DoubleTap,AddressOfservice_DoubleTap
MyBase.停止(imageview)
结束如果
结束子
私人子service_DragStarted (按值传递发送方作为对象,按值传递e作为InteractiveDragStartedEventArgs)
确保pinch没有工作,否则,忽略pan
如果(不我.CanStartWork (e))然后
返回
结束如果
“确保我们在做一个项目
如果我.Item是没有什么然后
返回
结束如果
e.IsHandled =真正的
我.OnWorkStarted (EventArgs.Empty)
结束子
私人子service_DragDelta (按值传递发送方作为对象,按值传递e作为InteractiveDragDeltaEventArgs)
如果(不我.IsWorking)然后
返回
结束如果
昏暗的项作为ImageViewerItem =我.Item
如果项是没有什么然后
返回
结束如果
“想想该怎么做
昏暗的dx作为整数= e.Change.X
昏暗的dy作为整数= e.Change.Y
如果Dx = 0需要说明Dy = 0然后
返回
结束如果
昏暗的scaleKey作为键=我.ScaleKeyModifier
昏暗的rotateKey作为键=我.RotateKeyModifier
昏暗的doScale作为布尔=(控制。ModifierKeys和scaleKey) = scaleKey
昏暗的doRotate作为布尔=(控制。ModifierKeys和rotateKey) = rotateKey
昏暗的imageview作为imageview =我.ImageViewer
如果doScale然后
缩放(imageViewer, item, dy, e.Origin)
ElseIfdoRotate然后
旋转(imageViewer, item, dx, e.Origin)
其他的
翻译(imageViewer, item, dx, dy)
结束如果
e.IsHandled =真正的
结束子
私人子service_DragCompleted (按值传递发送方作为对象,按值传递e作为InteractiveDragCompletedEventArgs)
如果(不我.IsWorking)然后
返回
结束如果
e.IsHandled =真正的
OnWorkCompleted (EventArgs.Empty)
结束子
私人子service_DoubleTap (按值传递发送方作为对象,按值传递e作为InteractiveEventArgs)
“确保我们没有在工作
如果我.IsWorkingOrElse(不我.CanStartWork (e))然后
返回
结束如果
“确保我们有一个项目
昏暗的项作为ImageViewerItem =我.Item
如果项是没有什么然后
返回
结束如果
e.IsHandled =真正的
我.OnWorkStarted (EventArgs.Empty)
身份(我.ImageViewer项)
我.OnWorkCompleted (EventArgs.Empty)
结束子
私人子身份(按值传递imageview作为imageview,按值传递项作为ImageViewerItem)
项。Transform = LeadMatrix。身份
结束子
私人子量表(按值传递imageview作为imageview,按值传递项作为ImageViewerItem,按值传递dy作为整数,按值传递位置作为LeadPoint)
“…
'集比例码
“…
结束子
私人子旋转(按值传递imageview作为imageview,按值传递项作为ImageViewerItem,按值传递dx作为整数,按值传递位置作为LeadPoint)
“…
'设置旋转代码
“…
结束子
私人子翻译(按值传递imageview作为imageview,按值传递项作为ImageViewerItem,按值传递dx作为整数,按值传递dy作为整数)
“…
'集转换代码
“…
结束子
结束类
公共子ImageViewerInteractiveMode_Example ()
_imageViewer.InteractiveModes.BeginUpdate ()
昏暗的模式作为新TransformInteractiveMode
模式。是Enabled =假
_imageViewer.InteractiveModes.Add(模式)
“…
“…
“…
_imageViewer.InteractiveModes.EndUpdate ()
结束子
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗网络查看器net
188宝金博怎么下载
支持的平台上
.NET、Java、Android和iOS/macOS程序集
C API/ c++类库
HTML5 JavaScript库
您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。
聊天时间:
周一至周五,美国东部时间上午8:30至下午6:00
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。