Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-07-20

STL итераторы

Приветствую comp,

вдруг неоджиданно возник такой вопрос:
в библиотеке STL различные объекты в контейнерах идентифицируются
"итераторами", которые сами являются объектами собственного класса.
В MFC все объекты идентифицируются с помощью POSITION, которая есть
ни что иное как указатель, занимает 4 байта и гарантированно
влезает в разного рода lParam'ы, SetItemData() и т.д. А как быть с
STL? Есть ли гарантия того, что итератор можно запихать в 4 байта?
(мне нужен multimap, которого в MFC к сожалению нету)
P.S. Глянул в код STL, мне поплохело от всех наворотов которые там
наворочены:)

   2005-07-20 19:55:41 (#404661)

Re: "Тормоза"

Если ты пишешь под Делфи, то альтернативным (вернее, не альтернативным, а <<обернутым
в класс>>) способом быстрой прорисовки в Delphi является использование свойства
TBitmap-объекта ScanLine. Т.е. нужно создать TImage и воспользоваться его свойством
Picture.Bitmap.ScanLine, причем для объекта TImage нет необходимости следить
за перерисовкой.

Номер выпуска : 4787
Возраст листа : 668 (дней)
Количество подписчиков : 526
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/404476
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-07-20 13:39:55 (#404476)

Re: "Тормоза"

>> Как исправить мерцание компонентов при растяжении окна программы?
>>
> Хоть кто-то из 520 подписчиков знает как:
> Как уменьшить мерцание формы при её масштабирование?
>
Не отвечаем, наверное, прежде всего потому, что под Delphi может
оказаться очень много причин мерцания, прежде всего из-за ее
основного преимущества - большого выбора компонентов.
Кто знает, что лежит у Вас на форме и что мерцает.
Даже при использовании стандартных компонентов есть немало
возможных источников проблем. Вот и не хочется
увязнуть в переборе вариантов.

Допустим, простейший случай. TPanel и на нем куча мерцающих TLabel.
Большинство компонентов, являющихся окнами Windows, создаются
так, что не затирают дочерних окон (стили WS_CLIPCHILDREN
и WS_CLIPSIBLINGS), в том числе и TCustomPanel.
Все бы хорошо, но TLabel не использует окон Windows, поскольку
наследована не от TWinControl. Это значит, что когда TPanel
перерисуется, она затрет метки и они будут отрисованы
заново - вот и мерцание.
В Delphi не реализован полномасштабный алгоритм отслеживания
перекрытий визуальных компонентов, и это, наверное,
правильно - разумнее пользоваться реализацией Windows.
А в описанном случае есть три решения:
1. использовать TStaticText; поскольку это окно Windows, лежа на
панели он мерцать не будет, но зато будут значительно
сильнее расходоваться ресурсы
2. поместить метки на отдельную панель, возможно, без рамки,
причем размеры этой панели не должны меняться
3. найти компонент, заменяющий TPanel и реализующий
отслеживание перекрытий лежащих
на нем компонентов

В общем случае, чтобы определить причину мерцания, придется
смотреть исходники компонентов. А для своих компонентов
пользоваться общими рекомендациями, не раз
приводившимися в этом листе:
1. подавлять обработку по умолчанию WM_ERASEBKGND,
если нет свободных участков окна, подлежащих
заполнению цветом фона
2. реже использовать InvalidateRect(hWnd,NULL,TRUE); если возможно,
отмечать для перерисовки нужно не все окно, а только
прямоугольник или даже регион с изменениями
3. если выполняется большое количество операций отрисовки,
можно рисовать в контексте в памяти, и только затем
выводить сформированное битовое изображение
на экран (в Delphi можно, например, воспользоваться
TBitmap.Canvas)
4. предотвращать затирание дочерних окон, используя стили
WS_CLIPCHILDREN и WS_CLIPSIBLINGS
5. не использовать без необходимости стили класса окна
CS_HREDRAW и CS_VREDRAW, приводящие к
перерисовке при изменении размера (для
Delphi обычно требуется сбросить их в CreateParams)
6. законченные оптимизаторы могут попробовать использовать
тройку функций BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos;
но в средах с широким использованием визуальных элементов,
не являющихся окнами, вроде Delphi, применение этих
функций по большому счету бессмысленно

Номер выпуска : 4786
Возраст листа : 668 (дней)
Количество подписчиков : 526
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/404405
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-07-20 12:15:07 (#404405)

Re: "Тормоза"

Здравствуйте !

> Как уменьшить мерцание формы при её масштабирование?

Для начало неплохо бы сообщить в какой среде работаем/
на чем пишем.

А так...

Общие рекомендации. Установить стили окна WS_CLIPCHILDREN,
WS_CLIPSIBLINGS. Если на форме что то рисуется, то выводить
графику через внеэкранный буфер (сначала рисовать в памяти,
потом делать BitBlt на форму).
Ну и при регистрации классов окон надо осмотрительно использовать
стили CS_HREDRAW и CS_VREDRAW.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4785
Возраст листа : 668 (дней)
Количество подписчиков : 529
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/404208
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-07-20 00:39:34 (#404208)

Re: P2P

Здравствуйте !

> Нужно написать пиринговый клиент. Есть идеи?

Вобщем, есть.
Если пойти в гугль и написать что то типа:
"p2p client cource code", то на первой странице
3-й ссылкой будет:

http://napshare.sourceforge.net/

Вот туда для начала и стоит заглянуть :)

Ну и еще гугль, наверно много чего знает.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4784
Возраст листа : 668 (дней)
Количество подписчиков : 529
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/404207
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-07-20 00:39:11 (#404207)