WPF (2).非常奇怪的移動無邊框窗體

曾經遇到過不使用API的移動無邊框窗體的代碼,非常簡潔,如下

 Point _downpoint;

bool _move = false;

private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            _downpoint.X = e.X;
            _downpoint.Y = e.Y;
            _down = true;


        }

 private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (_move)
            {
                this.Top += e.Y - _downpoint.Y;
                this.Left += e.X - _downpoint.X;
               
            }
        }

private void Form1_MouseUp(object sender, MouseEventArgs e)
         {
             _move = false;
         }

雖然代碼非常短,但是我一直搞不懂move的過程。我做了個測試

 private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (_move)
            {
                int y = e.Y - _downpoint.Y;
                int x = e.X - _downpoint.X;
                label1.Text = string.Format("x:{0};y:{1};top:{2},left:{3};chax:{4},chay:{5}", e.X, e.Y, this.Top, this.Left, x, y);
                this.Top += y;
                this.Left += x;
              }
        }


移動的座標 - 點下的座標一直爲0,但是top卻在一直變化。我認爲這個move的過程可能不止一個線程,實在是搞不清楚啊。

既然是寫WPF ,移動無邊框的windsow就非常簡單啦

只需加入this.DragMove(),  就可以。

如果在xp上移動窗體的話,你就會發現,在移動過程中,一直在動的是虛線框,窗體還在點擊位置,只有鬆開鼠標後,窗體纔會出現在當前移動位置。 this.DragMove(), 也是這種效果。

但是 使用第一種遞增top left的方法,就會只窗體跟着鼠標移動啦。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章