0

ウィンドウがドラッグされたときに発生するイベントが WinForms にありますか?

または、私がやりたいことを行うためのより良い方法があります: ウィンドウがドラッグされているときにウィンドウの不透明度を 80% に下げることですか?

残念ながら、誰もがシェルやその他のオブジェクトからのドラッグ アンド ドロップを探しているため、これを検索するのはばかげてトリッキーです。

4

2 に答える 2

3

WndProcハッキングの必要はありません。これは正常に機能します。

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

移動により、OnResizeXxxイベントもトリガーされます。

于 2010-03-31T09:52:27.873 に答える
2

それはLocationChangedあなたが望むイベントです:

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

WndProc不透明度を 1 にリセットするには、exit move イベントをオーバーライドして処理する必要があります。

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(code 0x0231) メッセージを処理する方が効率的である可能性がありますLocationChanged。これは、ドラッグ全体で継続的に不透明度を設定するのではなく、(ドラッグの開始時に) 1 回だけ不透明度を設定することになるためです。

于 2010-03-30T20:10:41.740 に答える