簡體   English   中英

WinForms窗口拖動事件

[英]WinForms window drag event

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:

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可能更有效,因為這只會導致一次不透明度設置(在拖動開始時),而不是在整個拖動過程中連續設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM