Событие перетаскивания окна WinForms - PullRequest
0 голосов
/ 31 марта 2010

Есть ли в WinForms событие, которое запускается при перетаскивании окна?

Или есть лучший способ сделать то, что я хочу: уменьшить непрозрачность окна до 80%, когда окно перетаскивается?

К сожалению, это глупо сложно искать, потому что все ищут перетаскивание из оболочки или другого объекта.

Ответы [ 2 ]

3 голосов
/ 31 марта 2010

Нет необходимости во взломе WndProc, все отлично работает:

protected override void OnResizeBegin(EventArgs e) {
  this.Opacity = 0.6;
}
protected override void OnResizeEnd(EventArgs e) {
  this.Opacity = 1.0;
}

Перемещения также вызывают события OnResizeXxx.

2 голосов
/ 31 марта 2010

Это событие LocationChanged, которое вы хотите:

private void YourApp_LocationChanged(object sender, EventArgs e)
{
    this.Opacity = 0.8;
}

Вам придется переопределить WndProc и обработать событие exit move, чтобы сбросить непрозрачность до 1:

protected override void WndProc(ref Message m)
{
    Trace.WriteLine(m.ToString());
    switch (m.Msg)
    {
        case WMEXITSIZEMOVE:
            this.Opacity = 1.0;
            break;
    }
    base.WndProc(ref m);
}

Не забудьте указать код сообщения:

private const int WMEXITSIZEMOVE = 0x0232;

Может быть более эффективно обрабатывать сообщение WM_ENTERSIZEMOVE (код 0x0231) вместо LocationChanged, поскольку это приведет к установке непрозрачности только один раз (в начале перемещения) а не постоянно на протяжении всего сопротивления.

...