Управление шрифтами, кистями и ручками в MFC - PullRequest
2 голосов
/ 21 января 2011

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

Имеет ли смысл создавать какие-томенеджер шрифтов?Я думал, что каждый раз, когда требуется шрифт, средство визуализации передает желаемое LOGFONT менеджеру.Если CFont существует, он будет возвращен, а если нет, создан.Этот диспетчер шрифтов будет глобальным в системе.

Это перебор?Делает ли Windows такие вещи скрытно, что совершенно не нужно с точки зрения приложения?

Можно также сказать то же самое для кистей и ручек определенного цвета.Быстрее ли хранить их в каком-то менеджере после его создания?Например, если я создаю сплошную лиловую кисть, должно ли другое окно, которое хочет, чтобы лиловая кисть запросила существующую кисть?

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

Ответы [ 3 ]

3 голосов
/ 21 января 2011

В разных версиях Windows кэширование этих вещей было разным.

Мой совет зависит от двух вещей:

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

  2. Измерение.Создайте программу для тестирования, которая создает и уничтожает сотни различных стилей шрифтов и измеряет их масштабируемость в производительности.

Однажды я долго писал многопоточный рендер.Только для того, чтобы выяснить это, поскольку драйверы GDI в любом случае сериализуют доступ к оборудованию, я получил нулевое преимущество.

2 голосов
/ 21 января 2011

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

Окончательное одобрение этой стратегии исходит из собственного кода Microsoft, Winforms делает это. Помните, что кеширование создает новую проблему, вы должны сделать кеш недействительным, когда пользователь изменит настройки системы. Системные цвета, DPI, и тому подобное. Вы должны прослушать WM_SETTINGCHANGE в окне верхнего уровня.

0 голосов
/ 21 января 2011

Windows имеет / имела (это было давно, так как я программировал для Windows), имела различные функции GetStockXXX, такие как GetStockFont ().У меня был быстрый Google, но никаких очевидных документов MSDN не появилось.

Редактировать: см. GetStockObject (): http://msdn.microsoft.com/en-us/library/dd144925%28VS.85%29.aspx

...