Уведомление об изменениях конфигурации
Quartz Display Services обеспечивает общий механизм уведомления для приложений, которые должны знать об изменениях конфигурации дисплея. Любое приложение может зарегистрировать функцию обратного вызова реконфигурирования дисплея. В нескольких точках во время реконфигурирования Кварц передает Вашей функции обратного вызова дисплей ID, флаги состояния и дополнительные частные данные. Во время изменения режима отображения, например, Вы могли использовать обратный вызов для печати сообщения журнала, описывающего новый режим.
Кварц вызывает Вашу функцию обратного вызова когда:
Ваше приложение вызывает функцию для реконфигурирования локального дисплея
Ваше приложение прислушивается к событиям в потоке обработки событий, и другое приложение вызывает функцию для реконфигурирования локального дисплея
Пользователь изменяет аппаратную конфигурацию дисплея — например, путем разъединения дисплея или изменения настроек установок системы
Перед реконфигурированием дисплея Кварц вызывает Вашу функцию обратного вызова один раз для каждого онлайнового дисплея для указания незаконченного изменения конфигурации. kCGDisplayBeginConfigurationFlag
флаг всегда устанавливается. После реконфигурирования дисплея Кварц вызывает Вашу функцию обратного вызова один раз для каждого добавленный, демонтированный, и онлайновый дисплей. Флаги указывают, как изменилась конфигурация дисплея.
Какао уже использует этот механизм уведомления для ответа на реконфигурирования дисплея. В результате, когда пользователь или изменения приложений режим отображения, включает зеркальное отражение или разъединяет дисплей, приложения Какао не должны касаться того, чтобы менять местоположение или изменения размеров их окон. Среды разработки приложения обрабатывают эту задачу автоматически.
Если Вы хотите получить уведомления об изменениях конфигурации, вот краткое описание шагов:
Зарегистрируйте свою функцию обратного вызова уведомления.
CGDisplayRegisterReconfigurationCallback (MyDisplayReconfigurationCallBack, &userInfo);
Когда Ваша функция вызвана, проверьте параметры, чтобы видеть, требуется ли действие. Например:
void MyDisplayReconfigurationCallBack (
CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo)
{
if (flags & kCGDisplaySetModeFlag) {
/* handle mode change for this display */
}
}
Когда Вы больше не требуете уведомления, удаляете регистрацию обратного вызова.
CGDisplayRemoveReconfigurationCallback (MyDisplayReconfigurationCallBack, &userInfo);