метод получения действительных полноэкранных разрешений на OS X в Objective-C или C ++?

Я делаю игру, и я хотел бы получить список действительных полноэкранных разрешений для запуска. Я не могу найти способ сделать это для Mac OS X;

Как в системные настройки Displays панель.

введите описание изображения здесь

Является ли это возможным?

1

Решение

Если вы хотите получить разрешение экрана дисплея.

Это может быть то, что вы после.

NSScreen* thescreen;
id theScreens = [NSScreen screens];

for (thescreen in theScreens) {
NSLog(@"%@x%@",  [NSNumber numberWithFloat:[thescreen frame].size.width],   [NSNumber numberWithFloat:[thescreen frame].size.height]);
}

Этот пример даст вам задавать разрешения всех дисплеев

Посмотри на яблоки NSScreen

Если это не совсем то, что вам нужно, вы можете расширить свой вопрос.

ура


  • ОБНОВИТЬ. что касается комментария от OP о желании всех возможных разрешений экрана.

Это может быть то, что вы ищете, и вам придется поиграть с ним, чтобы увидеть, действительно ли он возвращает правильную информацию. Я получил несколько результатов, следовательно, фильтр. Но если вы играете с этим, вы должны быть в состоянии уменьшить его.

Тестовый проект использовал ARC, и это вызвало __bridges ..
Но, опять же, я уверен, что у вас будет время лучше все это кодировать.

Моя ссылка была Справочник по Quartz Display Services

NSArray* theref  =  (__bridge NSArray *)(CGDisplayCopyAllDisplayModes ( CGMainDisplayID(), nil ));

NSMutableArray * rezes = [[NSMutableArray  alloc]init];

for (id aMode  in theref) {
CGDisplayModeRef  thisMode = (__bridge CGDisplayModeRef)(aMode);
size_t theWidth = CGDisplayModeGetWidth( thisMode );
size_t theHeight = CGDisplayModeGetHeight( thisMode );
NSString *theRez = [NSString stringWithFormat:@"%zux%zu",theWidth,theHeight];

if (![rezes containsObject:theRez]) {
[rezes addObject:theRez];
}
}

NSLog(@" display deatails = %@", rezes);

—>
display deatails = (
2560x1440,
1280x720,
640x480,
800x600,
1024x768,
1280x1024,
1344x756,
1600x900,
1680x1050,
1920x1080,
1600x1200,
1920x1200
)

4

Другие решения

В C ++ http://specialmeaning.blogspot.com/2016/07/yes-apple-i-did-it.html

#include <iostream>
#include <CoreGraphics/CoreGraphics.h>

int main(int argc, const char * argv[]) {
// insert code here...
auto mainDisplayId = CGMainDisplayID();

std::cout << "Current resolution was "<< CGDisplayPixelsWide(mainDisplayId) << 'x'
<< CGDisplayPixelsHigh(mainDisplayId) << std::endl
<< "Supported resolution modes:";

auto modes = CGDisplayCopyAllDisplayModes(mainDisplayId, nullptr);
auto count = CFArrayGetCount(modes);
CGDisplayModeRef mode;
for(auto c=count;c--;){
mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, c);
auto w = CGDisplayModeGetWidth(mode);
auto h = CGDisplayModeGetHeight(mode);
std::cout << std::endl << w << 'x' << h;
}
CGDisplaySetDisplayMode(mainDisplayId, mode, nullptr);
std::cout << " is the selected top one." << std::endl;
std::cin.get();
return 0;

}
0

По вопросам рекламы [email protected]