Мне нужно, чтобы моя программа работала в Mac OS 10.5 - 10.7, однако некоторые системные функции устарели с 10.5.Моя проблема в том, что CGDisplayBitsPerPixel
не существует с 10.6, а новая функция CGDisplayModeCopyPixelEncoding
не работает под 10.5.
Как я могу сделать свою программу доступной для всех этих версий Mac OS?
Я мог бы использовать #ifdef _xxx_
для решения этой проблемы, но это означало бы, что мне нужны две разные сборки моего приложения.и мне нужен один.
Вот как я устанавливаю VideoMode:
- Получение displayID
- Получение всех доступных режимов и отправка их в VideoModeList
- Получение ширины экрана, высоты и bpp
Пример кода:
VideoModeList->setDesktop(rect(screen_w, screen_h), screen_bpp);
VideoModeList->setEffectiveDesktop(rect(screen_w, screen_h), screen_bpp);
UPD (поскольку новые пользователи не могут публиковать ответы на свои вопросы в течение 8 часов): я думаю,Я наконец нашел способ сделать это.Я избежал CGDisplayBitsPerPixel
вместо этого.Вот фрагмент кода:
// That's how you know what OS you are dealing with in runtime instead of compiletime
bool macOSX_10_6_orHigher = (CGDisplayCopyAllDisplayModes != NULL);
if (macOSX_10_6_orHigher)
{
// This function uses CGDisplayModeCopyPixelEncoding and CGDisplayCopyDisplayMode
// to determine BPP.
screenBPP = getDisplayBitsPerPixel(displayID);
}
else
{
// This function in deprecated, bit it is still there, so you will get a warning
// instead of error
CFDictionaryRef = currentDisplayMode = CGDisplayCurrentMode(mode);
CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(currentDisplayMode, kCGDisplayBitsPerPixel), kCFNumberIntType, &screenBPP);
}
PS Если вы хотите предложить другое решение, я все еще слежу за темой, и мы можем получить обсуждение.PPS Спасибо за ваш интерес к этому вопросу и спасибо администратору, который исправил мой 1-й пост.