ウィンドウがドラッグされたときに発生するイベントが WinForms にありますか?
または、私がやりたいことを行うためのより良い方法があります: ウィンドウがドラッグされているときにウィンドウの不透明度を 80% に下げることですか?
残念ながら、誰もがシェルやその他のオブジェクトからのドラッグ アンド ドロップを探しているため、これを検索するのはばかげてトリッキーです。
WndProcハッキングの必要はありません。これは正常に機能します。
protected override void OnResizeBegin(EventArgs e) {
this.Opacity = 0.6;
}
protected override void OnResizeEnd(EventArgs e) {
this.Opacity = 1.0;
}
移動により、OnResizeXxxイベントもトリガーされます。
それは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 回だけ不透明度を設定することになるためです。