проблемы с движущимся окном - PullRequest
1 голос
/ 08 августа 2011

Я использую код ниже, чтобы переместить форму окна, переместить работу нормально, но проблема с непрозрачностью и закрытием.Я хочу, чтобы это работало следующим образом: когда я нажимаю кнопку opacity = 0.5, когда я поднимаю кнопку opacity = 1, когда левая кнопка опускается, и я перемещаю окно мыши, двигаемся также, когда я просто нажимаю на форму, форма должна закрываться.

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public partial class FormImage : Form {

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

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

    public FormImage() {
        InitializeComponent();
    }

    private void FormZdjecie_MouseMove( object sender, MouseEventArgs e ) {
        if ( e.Button == MouseButtons.Left) {
            ReleaseCapture();
            SendMessage( Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 6 );
        }
    }

    private void FormImage_MouseDown( object sender, MouseEventArgs e ) {
        this.Opacity = 0.5;
    }

    private void FormImage_MouseUp( object sender, MouseEventArgs e ) {
        this.Opacity = 1;
    }

    private void FormImage_MouseClick( object sender, MouseEventArgs e ) {
        Close();
    }
}

Есть идеи, как восстановить этот код?

1 Ответ

3 голосов
/ 19 августа 2011

Отправка WM_NCLBUTTONDOWN с помощью HT_CAPTION сожжет ваше MouseUp событие.

Все, что вам нужно сделать, это изменить Opacity сразу после вашего SendMessage вызова.

Рабочий пример:

public partial class FormImage : Form
{
  public const int WM_NCLBUTTONDOWN = 0xA1;
  public const int HT_CAPTION = 0x2;

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

  public FormImage()
  {
    InitializeComponent();
  }

  private void FormImage_MouseDown(object sender, MouseEventArgs e)
  {
    this.Opacity = 0.5;  
    ReleaseCapture();
    SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    this.Opacity = 1;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...