Плавное изменение размера для формы Windows - PullRequest
0 голосов
/ 28 ноября 2018

Я воссоздаю функциональность изменения размера для формы с помощью FixedSingle FormBorderStyle, используя следующие методы для обновления размера / позиции:

private void resizeBottom()
{
    this.SuspendLayout();
    this.SetBoundsCore(this.Location.X, this.Location.Y, this.Width, Cursor.Position.Y - this.Location.Y, BoundsSpecified.Size);
}

…(other resize helpers)...

protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
    base.SetBoundsCore(x, y, width, height, specified);
    this.ResumeLayout();
}

Однако, когда я пытаюсь изменить размер окна, я получаю много артефактов,особенно, если я изменяю размер с нужной скоростью, похоже, что окно «размазано» по экрану.Я попытался включить двойную буферизацию, но, похоже, это не имеет значения.

1 Ответ

0 голосов
/ 28 ноября 2018

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

private void resizeBottom()
{
    SetBounds(Location.X, Location.Y, Width, Cursor.Position.Y + 30 - Location.Y);
}

protected override void SetBoundsCore(int x, int y, int width, int height,
                                      BoundsSpecified specified)
{
    base.SetBoundsCore(x, y, width, height, specified);
    Update();
}

Update() заставляет форму перерисовываться мгновенно.

Примечание: я использовал Cursor.Position.Y + 30, в противном случае я могу только сделать форму меньше, так как мышь покидает окно, если я опускаюсь.

...