Leadtools.Controlsアセンブリ > Leadtools.Controls名前空間 > ImageViewerSpyGlassInteractiveModeクラス :RedirectControlプロパティ |
ImageViewerSpyGlassInteractiveModeは、ビューワでマウスの下で領域の代わりにレンダリング出力を外部制御にリダイレクトすることをサポートします。この値がフォームの上で有効なコントロールに設定されるとき、対話モードは対照ペイントイベントにサブスクライブして、このコントロールの表面に拡大鏡にコンテンツを与えます。任意のWindowsフォームは機能します:しかし、それがダブルバッファリングをサポートするため、カスタムユーザ制御またはPictureBoxコントロールは最も効率的です。
Imports Leadtools Imports Leadtools.Controls Imports Leadtools.Codecs Imports Leadtools.Drawing Imports Leadtools.ImageProcessing Imports Leadtools.ImageProcessing.Color Dim panel As Panel = New Panel() panel.Width = 300 panel.Dock = DockStyle.Right _control.Controls.Add(panel) panel.BringToFront() Dim label As Label = New Label() label.Text = "Double click to switch between viewer and here" label.AutoSize = True label.Dock = DockStyle.Top panel.Controls.Add(label) ' Any control will do, but a PictureBox is perfect since it does double buffering Dim redirectControl As PictureBox = New PictureBox() redirectControl.Dock = DockStyle.Fill redirectControl.BackColor = Color.Gray panel.Controls.Add(redirectControl) redirectControl.BringToFront() redirectControl.Visible = False _imageViewer.BringToFront() Dim mode As ImageViewerMagnifyGlassInteractiveMode = New ImageViewerMagnifyGlassInteractiveMode() AddHandler mode.WorkStarted, Sub(sender, e) If Not mode.RedirectControl Is Nothing Then mode.RedirectControl.Visible = True End If End Sub AddHandler mode.WorkCompleted, Sub(sender, e) If Not mode.RedirectControl Is Nothing Then mode.RedirectControl.Visible = False End If End Sub mode.RedirectControl = redirectControl AddHandler panel.MouseDoubleClick, Sub(sender, e) If mode.RedirectControl Is Nothing Then mode.RedirectControl = redirectControl Else mode.RedirectControl = Nothing End If End Sub _imageViewer.InteractiveModes.BeginUpdate() _imageViewer.InteractiveModes.Add(mode) _imageViewer.InteractiveModes.EndUpdate() For Each shape As ImageViewerSpyGlassShape In System.Enum.GetValues(GetType(ImageViewerSpyGlassShape)) _shapeComboBox.Items.Add(shape) Next shape _shapeComboBox.SelectedItem = mode.Shape AddHandler _shapeComboBox.SelectedIndexChanged, Sub(sender, e) mode.Shape = CType(_shapeComboBox.SelectedItem, ImageViewerSpyGlassShape)
using Leadtools; using Leadtools.Controls; using Leadtools.Codecs; using Leadtools.Drawing; using Leadtools.ImageProcessing; using Leadtools.ImageProcessing.Color; Panel panel = new Panel(); panel.Width = 300; panel.Dock = DockStyle.Right; _control.Controls.Add(panel); panel.BringToFront(); Label label = new Label(); label.Text = "Double click to switch between viewer and here"; label.AutoSize = true; label.Dock = DockStyle.Top; panel.Controls.Add(label); // Any control will do, but a PictureBox is perfect since it does double buffering PictureBox redirectControl = new PictureBox(); redirectControl.Dock = DockStyle.Fill; redirectControl.BackColor = Color.Gray; panel.Controls.Add(redirectControl); redirectControl.BringToFront(); redirectControl.Visible = false; _imageViewer.BringToFront(); ImageViewerMagnifyGlassInteractiveMode mode = new ImageViewerMagnifyGlassInteractiveMode(); mode.WorkStarted += (sender, e) => { if (mode.RedirectControl != null) mode.RedirectControl.Visible = true; }; mode.WorkCompleted += (sender, e) => { if (mode.RedirectControl != null) mode.RedirectControl.Visible = false; }; mode.RedirectControl = redirectControl; panel.MouseDoubleClick += (sender, e) => { if (mode.RedirectControl == null) mode.RedirectControl = redirectControl; else mode.RedirectControl = null; }; _imageViewer.InteractiveModes.BeginUpdate(); _imageViewer.InteractiveModes.Add(mode); _imageViewer.InteractiveModes.EndUpdate(); foreach (var shape in Enum.GetValues(typeof(ImageViewerSpyGlassShape))) _shapeComboBox.Items.Add(shape); _shapeComboBox.SelectedItem = mode.Shape; _shapeComboBox.SelectedIndexChanged += (sender, e) => mode.Shape = (ImageViewerSpyGlassShape)_shapeComboBox.SelectedItem;