Управление окном визуализатора PCL, интегрированным в панель C# WinFormsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Управление окном визуализатора PCL, интегрированным в панель C# WinForms

Сообщение Anonymous »

Как указано в заголовке, я пытаюсь отобразить визуализатор PCL (библиотека облаков точек) внутри формы C# и управлять видом визуализированного облака точек с помощью мыши.
Пока что Я создал проект библиотеки классов CLR, чтобы создать библиотеку-оболочку для визуализации PCL. Я могу без проблем отобразить визуализатор PCL внутри элемента управления «Панель».
Я хочу управлять отображаемым представлением с помощью элементов управления мышью. Первый элемент управления, который я хочу реализовать, — это увеличение/уменьшение масштаба с помощью колеса мыши. Я могу сделать это с помощью колеса мыши, но только в той части панели, где оно не занято окном визуализатора PCL. Код формы, который я пробовал, выглядит следующим образом.

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PCLWrapper;

namespace TestForms
{
public partial class Form1 : Form
{
private PCLWrapper.PCLWrapper pclWrapper;
public Form1()
{
InitializeComponent();
InitializePCLVisualizer();
this.panel1.MouseWheel += panel1_MouseWheel;
this.panel1.MouseHover += panel1_MouseHover;
this.panel1.MouseDoubleClick += panel1_MouseDoubleClick;
panel1.Focus();
this.panel1.BringToFront();

}

private void panel1_MouseHover(object sender, EventArgs e)
{
panel1.Focus();
}

private void panel1_MouseWheel(object sender, MouseEventArgs e)
{
pclWrapper.Zoom(e.Delta / 1);
}

private void InitializePCLVisualizer()
{
pclWrapper = new PCLWrapper.PCLWrapper();

// Get the handle of the panel to pass it to the visualizer
IntPtr panelHandle = panel1.Handle;

// Initialize the visualizer with the panel handle
pclWrapper.InitializeViewer(panelHandle);
}

private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
//pclWrapper.UpdateViewer();
//timer1.Start();
}

private async void UpdateViewerContinuously()
{
while (true)
{
pclWrapper.UpdateViewer();
refreshPanel(panel1);
await Task.Delay(10); // Adjust delay as needed
}
}

private void Form1_Load(object sender, EventArgs e)
{

// Start continuous update in a separate task
UpdateViewerContinuously();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Ensure proper cleanup
pclWrapper = null;
base.OnFormClosing(e);
}

private void refreshPanel(Panel panel)
{
if (panel.InvokeRequired)
{
refreshPanel(panel);
}
else
{
panel.Refresh();
}

}

private void panel1_MouseEnter(object sender, EventArgs e)
{
panel1.Focus();
}

}
}
Ниже показано изображение, поясняющее проблему:
[img]https://i.sstatic.net /oTf5Bn0A.png[/img]

В чем может быть проблема?

Подробнее здесь: https://stackoverflow.com/questions/791 ... orms-panel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»