Управление подвижной панелью с помощью C # - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь сделать мой элемент управления перемещаемым с помощью c #, но моя основная форма перемещается вместе с элементом управления панелью при перетаскивании.Есть ли лучший код для этого?

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCaptre();

public static void _MOVE_PANEL(IntPtr Handle, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
       ReleaseCaptre();
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    } 
}

private void sub_inv_pcount_edit_MouseMove(object sender, MouseEventArgs e) //panel move
{
    _MOVE_PANEL(Handle, e);
}

смотри пример: смотри скриншот

1 Ответ

0 голосов
/ 27 сентября 2019

Боюсь, это не тот подход, который вы можете настроить, чтобы получить желаемый результат.WM_NCLBUTTONDOWN - это то, как оконный менеджер решает, как обрабатывать события мыши в окне top-level .Он позволяет создавать окна с пользовательским Chrome, но не позволяет вам ничего делать с окнами не верхнего уровня (например, с панелью).

Вы можете получить разумно работающее перетаскивание.Делать очевидную вещь - в MouseMove, обрабатывать перемещение элемента управления самостоятельно.Это не будет вести себя так же хорошо, как перемещение всего окна.

...