2016-10-28 7 views
1

Работа с системой, написанной с использованием win32 C/C++, использует GDI для рисования поперечного сечения сложной машины (теплообменника), большая часть кода написана на основе C (не C++ и, следовательно, объектно-ориентированное программирование). Мне интересно, могу ли я использовать GDI + с этой системой.Использование GDI + с устаревшей системой на базе win32 на основе C с использованием GDI

В настоящее время весь код использует базовые примитивы GDI, такие как HPEN, HBRUSH, Polygon(), Rectangle(), MoveToEx(), LineTo(), DrawText() и т. Д. Одной из веских причин для включения или начала использования GDI + является для рисования деталей контекста для компонента, информирующего о всплывающей подсказке, см. это SO question. Я прочитал, что визуализация шрифтов GDI + не так эффективна, как GDI (link).

Подводя итоги, могу ли я использовать GDI + с этой старой системой (переписать невозможно, так как у нее огромная база кода). Во-вторых, могу ли я получить удар производительности, если я перейду на GDI +?

+0

Вы можете рисовать с помощью любой системы, которую вы хотите, в худшем случае вы можете даже начать рисовать с помощью GDI на растровом изображении, затем продолжить с GDI +, а в конце разбить растровое изображение на экране или везде, где GDI первоначально рисовал; переход от рисования на экране к рисованию растрового изображения для устаревшей части кода должен быть только в создании DC. Для удара производительности нет лучшего способа, чем измерить его напрямую. –

+1

Невозможно использовать базовый api, основанный на C, но это, безусловно, жестокое и необычное наказание и плохо документировано. Пора добавить код C++ в этот проект, объявить вспомогательные функции рисования C++ 'extern" C ", чтобы компоновщик был счастлив. –

ответ

-2

Мне интересно, могу ли я использовать GDI + с этой системой.

GDI+ documentation предлагает ответить да.

В частности, он говорит:

аудитория Разработчик

++ интерфейс класса на основе GDI + C предназначен для использования программистами C/C++. Требуется знакомство с графическим интерфейсом Windows и архитектурой, управляемой сообщениями.

Как вопрос, если он будет медленнее, я подозреваю, вы увидите очень мало, если какой-либо потери в производительности, только потому, что это не будет ничего более тонкого слоя C++ над теми же функциями API Win32 GDI.

+5

Нет, GDI + не является тонким слоем поверх GDI. GDI + - это собственная модель пользовательского чертежа, которая делает все с нуля, чтобы обеспечить более качественную графику (и IIRC GDI + делает все это в программном обеспечении, поэтому у него есть производительность, поражающая GDI, но я не уверен на 100%). При этом OP специально запросил интерфейс C, а GDI + имеет один: «плоский API» (но здесь - драконы). Что касается OP, так как вам не нужно угождать как можно большему количеству людей и знать свои требования, оценивать и оценивать, чтобы определить, какой API лучше всего соответствует вашим целям. – andlabs

+0

Ссылка, которую я разместил, говорит * предназначена для использования программистами C/C++ *, и это говорит мне, что это также жизнеспособное решение для программистов C. – jussij

+0

Правильно, но тогда вы говорили о интерфейсе C++ в остальной части своего ответа или, по крайней мере, так я его читал. Я просто предоставлял C-специфическую информацию, чтобы подчеркнуть ее более прямо, в случае, если OP случайно достиг такого же значения. Извинения за недопонимание. – andlabs