У меня есть приложение для настольного компьютера 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
Как я могу заставить управление RESIZEGRIP WPF и курсор синхронизировать в положении при перемещении мыши с помощью Scal ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Bootstrap Toolp в неправильном положении при начальном падении, затем в правильном положении
Anonymous » » в форуме Html - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Bootstrap Toolp в неправильном положении при начальном падении, затем в правильном положении
Anonymous » » в форуме CSS - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Попытка заставить div «следовать» за курсором при перемещении мыши, но с задержкой
Anonymous » » в форуме Jquery - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-