Как я могу заставить управление RESIZEGRIP WPF и курсор синхронизировать в положении при перемещении мыши с помощью ScalC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу заставить управление RESIZEGRIP WPF и курсор синхронизировать в положении при перемещении мыши с помощью Scal

Сообщение Anonymous »

У меня есть приложение для настольного компьютера WPF, которое имеет управление сеткой, которое плавает на экране. С приведенным ниже кодом я изменяю размер своей сети с помощью ResizeGrip, расположенной в правом нижнем углу сетки. Я прикрепил 3 события RESIZEGRIP_MOUSEDOWN, RESIZEGRIP_MOUSEMOVE и RESIZEGRIP_MOUSEUP к управлению RESIZEGRIP. Я использую Scaletransform для масштабирования или вверх по сетке для изменения размера. Я пробовал разные способы исправить это даже с помощью методов SetCursporspos и GetCurspors от user32.dll и до сих пор не повезло. Когда я перемещаю мышь? < /p>


[DllImport("user32.dll")]
public static extern bool SetCursorPos(int X, int Y);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
}

ResizeGrip resizeGrip;
bool bottomResize;
double initBtmX, initBtmY;
double initCursorX, initCursorY;
double startScaler; // Store initial scale

private void ResizeGrip_MouseDown(object sender, MouseButtonEventArgs e)
{
resizeGrip.CaptureMouse();

// Store the initial mouse position relative to _parentGrid
//Point mousePos = e.GetPosition(_parentGrid);
Point mousePos = resizeGrip.TransformToAncestor(_parentGrid).Transform(new Point(0, 0));
initBtmX = mousePos.X;
initBtmY = mousePos.Y;

// Store the cursor's initial screen position
if (GetCursorPos(out POINT cursorPos))
{
initCursorX = cursorPos.X;
initCursorY = cursorPos.Y;
}

// Store the initial scaling factor
startScaler = _treatmentTransform.Scaler;

bottomResize = true;
e.Handled = true;
}

private void ResizeGrip_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && bottomResize)
{
// Get new mouse position relative to _parentGrid
Point newMousePos = e.GetPosition(_parentGrid);
double newBtmX = newMousePos.X;

// Calculate how far the mouse moved from its initial position
double deltaX = newBtmX - initBtmX;

// Compute a new scaling factor based on movement
double newScaler = startScaler + (deltaX / _parentGrid.ActualWidth);

// Keep scaling within reasonable limits
newScaler = Math.Max(0.25, Math.Min(newScaler, 1));

if (newScaler > 0.25 && newScaler

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

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

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

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

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

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

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