Как относительный новичок в MFC, я вижу Device Contexts (DCs) много. Я смутно понимаю, что это как-то связано с рисованием, но особенности не очень хорошо объясняются где угодно, что я могу найти. Что означает создание «совместимого контекста устройства» и почему оно важно? Что делает SelectObject, и как мне сначала сделать совместимость с DC?Общие сведения об объектных контекстах
ответ
Контекст устройства - это просто место, где происходит рисование, поэтому, если у вас есть два разных DC, вы рисуете в двух разных местах. Вид вроде дескриптора файла.
Устройства Контексты могут относиться к недвижимости на экране или к растровым изображениям, которые только что находятся в памяти, и, возможно, в других местах, это те, о которых я могу сейчас думать.
Совместимые контексты - это те, которые имеют одну и ту же базовую организацию пикселей, под которой подразумевается количество бит на пиксель, байт на пиксель, организация цвета и т. Д. Контексты растровых изображений в памяти могут иметь любую организацию, которую вы хотите, но ваши контексты экрана будут связаны (в конечном итоге) с буферами на вашей видеокарте, которые (в зависимости от режима и т. Д.) Имеют очень специфическую организацию пикселей.
Наличие совместимых контекстов означает, что он эффективен для передачи данных изображений между ними, поскольку требуется мало или вообще не требуется перевод данных. С другой стороны, если у вас есть 256 цветовая палитра, 8-битная карта, и вы пытаетесь разбить ее на экран с 8 бит каждого из RGBA на пиксель, каждый последний пиксель потребует значительного массирования при его копировании и, таким образом, копирования несовместимых растровые изображения намного медленнее. Согласно документации Win32 SDK, по крайней мере BitBlt() и StretchBlt() «преобразуют исходный формат цвета в соответствие с форматом назначения», так что это можно сделать.
Изучите CreateCompatibleDC() и CreateCompatibleBitmap() в качестве отправных точек для создания контекстов рисования, которые совместимы с уже существующими.
SelectObject() определяет, какие ресурсы в данный момент активны в контексте устройства. Контекст имеет текущую ручку, кисть, шрифт и растровое изображение. Они делают многие другие вызовы GDI проще, позволяя вам задавать меньшее количество параметров. Например, вам не нужно указывать шрифт при использовании TextOut(), но если вы хотите изменить шрифт, туда входит SelectObject(). Если вы подаете SelectObject() дескриптор шрифта, возвращаете Значение - это дескриптор шрифта, который действовал, а последующие операции используют новый шрифт. Поведение одинаково для других видов ресурсов, ручек, кистей и т. Д.
- 1. Общие сведения об объектных переменных VBA
- 2. Общие сведения об объектных рамках объекта
- 3. Общие сведения об расширении GL_ARB_conservative_depth
- 4. Общие сведения об отношениях @EndNode
- 5. Общие сведения об экспорте/требовании NodeJS
- 6. Общие сведения об исключениях, отмеченных проверкой ловли
- 7. Общие сведения об общей производительности MongoDB
- 8. Общие сведения об общих подписях: карта
- 9. Общие сведения об удалении актера службы ткани
- 10. Общие сведения об обработке ошибок Excel VBA
- 11. Общие сведения об инструментах и управлении памятью
- 12. Общие сведения об услугах с обещаниями
- 13. Общие сведения об аутентификации Windows WCF
- 14. Общие сведения об усечении строки регулярного выражения
- 15. Общие сведения об автономном поведении Microsoft CDO.Message
- 16. Rails - Аннотация/общие сведения
- 17. Общие сведения о соединении()
- 18. Общие сведения о MVVM
- 19. Случайные значения, общие сведения
- 20. Общие сведения о памяти
- 21. Сбросить общие сведения?
- 22. Общие сведения о типах семейств
- 23. Общие сведения о состоянии кластера
- 24. Общие сведения об установке repospos и зависимостях install.packages()
- 25. API Google Webmasters NodeJs Общие сведения об ответе
- 26. Общие сведения об обработке инертной обработки IE11 через COM
- 27. Общие сведения об виртуальном адресе и виртуальном адресном пространстве
- 28. Общие сведения об аутентификации на сервере приложений Java
- 29. Общие сведения об экземплярах объектов и создании в PHP
- 30. Общие сведения об отключенном запрошенном флаге при выключении
Спасибо! Некоторые последующие вопросы по этому поводу: «Можете ли вы использовать несовместимые контроллеры домена и все еще иметь рабочую программу (хотя и намного медленнее)? И где SelectObject входит в концепцию совместимости контекста устройства? – Smashery
@Smashery: отредактировано немного, чтобы лучше решить эти проблемы. – JustJeff
Спасибо - очень ясный и полезный ответ! – Smashery