Получение дисплеев
Если Вы пишете иммерсивное приложение, такое как игра или программа представления, можно хотеть сделать полноэкранное получение.
Общий подход должен получить дисплей, который Вы хотите использовать. При получении дисплея у Вас есть монопольное использование дисплея. Другим приложениям и системным службам не позволяют использовать дисплей или изменить его конфигурацию. Кроме того, они не уведомляются относительно изменений дисплея, таким образом препятствуя тому, чтобы они меняли местоположение их окон и Средства поиска от того, чтобы менять местоположение значков на рабочем столе.
Для получения единственного дисплея вызовите функцию CGDisplayCapture
. Для получения всех онлайновых дисплеев сразу вызвать CGCaptureAllDisplays
. По умолчанию полученный экран заполнен черным цветом; у Вас есть опция отключения этой опции при получении использования функций CGDisplayCaptureWithOptions
или CGCaptureAllDisplaysWithOptions
.
После получения дисплея существует несколько опций получения:
Если Вы пишете приложение OpenGL, можно создать OpenGL полноэкранный контекст получения. Для получения дополнительной информации см. Руководство по программированию OpenGL для Mac.
Можно нарисовать непосредственно на экран с помощью 2D Кварца. Используйте функцию
CGDisplayGetDrawingContext
получить полнофункциональный графический контекст для дисплея. Графический контекст остается допустимым, пока дисплей не выпущен или его изменения конфигурации. Источник контекста является нижним левым углом дисплея.В OS X v10.5, можно нарисовать непосредственно на экран с помощью собственного механизма получения. Вызвать
CGDisplayBaseAddress
илиCGDisplayAddressForPosition
получить адрес в кадровом буфере, к которому можно нарисовать. В OS X v10.6 или позже необходимо использовать Кварц, OpenGL или другую графическую технологию.
Когда Вы закончены с помощью полученного дисплея, необходимо выпустить его путем вызова CGDisplayRelease
или CGReleaseAllDisplays
.
Перечисление 1 показывает, как получить основной дисплей и нарисовать текстовую строку с помощью 2D Кварца. Подробное объяснение каждой пронумерованной строки кода появляется после перечисления.
Перечисление 1 Получая основной дисплей
char *text = "Hello, World!"; |
CGDirectDisplayID display = kCGDirectMainDisplay; // 1 |
CGError err = CGDisplayCapture (display); // 2 |
if (err == kCGErrorSuccess) |
{ |
CGContextRef ctx = CGDisplayGetDrawingContext (display); // 3 |
if (ctx != NULL) |
{ |
CGContextSelectFont (ctx, "Times-Roman", 48, kCGEncodingMacRoman); |
CGContextSetTextDrawingMode (ctx, kCGTextFillStroke); |
CGContextSetRGBFillColor (ctx, 1, 1, 1, 0.75); |
CGContextSetRGBStrokeColor (ctx, 1, 1, 1, 0.75); |
CGContextShowTextAtPoint (ctx, 40, 40, text, strlen(text)); // 4 |
sleep (4); // 5 |
} |
CGDisplayRelease (display); // 6 |
} |
Вот то, что делает код:
Получает дисплей ID основного дисплея.
Получает основной дисплей и изменяет цвет на черный цвет. Ошибка возвращается, только если дисплей был получен другим приложением.
Получает Кварцевый контекст графики, связанный с полученным дисплеем.
Рисует текстовую строку в нижнем левом углу экрана.
Приостанавливает обработку в течение нескольких секунд, чтобы позволить пользователю читать текст.
Выпускает полученный дисплей.