Пользовательские элементы управления: окно чата MSN - PullRequest
5 голосов
/ 15 марта 2010

Мне интересно узнать о знаменитых окнах разговоров клиентов чата MSN! Я уверен, что должно быть много разных аспектов, но я хотел бы сосредоточиться на этих маленьких скользящих панелях. Например, где отображаются изображения людей в разговоре. Когда вы нажимаете кнопку свертывания, изображения исчезают, и панель изящно скользит, а когда вы нажимаете ее снова, чтобы развернуться, она выдвигается, и изображения плавно исчезают.

Как можно было бы нарисовать элемент управления в WinForms с аналогичным поведением?

1 Ответ

2 голосов
/ 15 марта 2010

Это должно дать вам представление о том, как оживить вашу ширину.

int _collapsedWidth;
int _fullWidth;
float _speed;
float _acurateWidth;

System.Diagnostics.Stopwatch _stopwatch = new Stopwatch ();

int _animationDirection;

AnimatedControl (){

    Application.Idle += ApplicationIdle;
}

void Expand (){
    _animationDirection = 1;
    _stopwatch.Start();
}

void ApplicationIdle (object sender, EventArgs e){
    if (_animation.Direction == 0)
        return;

    float delta = _stopwatch.Elapsed.TotalMilliseconds * _speed;

    _acurateWidth += delta;

    if (_acurateWidth < _collapsedWidth)
    {
        _animationDirection = 0;
        _acurateWidth = _collapsedWidth;
        _stopwatch.Stop();              
    }
    else if (_acurateWidth > _fullWidth)
    {
        _animationDirection = 0;
        _acurateWidth = _fullWidth;
        _stopwatch.Stop();      
    }

    _stopwatch.Reset();

    this.Width = (int)System.Math.Round(_acurateWidth , MidpointRounding.AwayFromZero);
    this.Invalidate (); // May not need this

}

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

Затем вы можете поместить этот элемент управления в один из LayoutPanel элементов управления, чтобы перемещать другие элементы управления в форме в соответствии с шириной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...