我需要我的程序在Mac OS 10.5-10.7上運行,但有些系統函數自10.5以來已被棄用。我的問題是從10.6開始不存在,而新函數CGDisplayModeCopyPixelEncoding
在10.5下不能運行。如何避免CGDisplayModeCopyPixelEncoding獲得BPP?
如何讓我的程序可用於所有這些版本的mac os?
我可以使用一些#ifdef _xxx_
解決這個問題,但這意味着我需要兩個不同的應用程序版本,我需要一個。
這是我如何設置:視頻模式:
- 獲取displayID
- 獲取所有可用的模式,推動「時間VideoModeList
- 獲取屏幕寬度,高度和BPP
代碼示例:
VideoModeList->setDesktop(rect(screen_w, screen_h), screen_bpp);
VideoModeList->setEffectiveDesktop(rect(screen_w, screen_h), screen_bpp);
UPD(由於新用戶無法在8小時內發佈自己的問題解答): 我想我已經找到了解決問題的方法。我已經避免了。這是一個代碼smaple:
// 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);
}
P.S.如果您想提出另一種解決方案,我仍然關注這個話題,並且可以進行討論。 P.P.S.感謝您對此問題的關注,並感謝管理員更正了我的第一篇文章。
如果你找到一個更清潔的版本,我會很感興趣。 :-) – Hiura