How to show all supported resolutions for display in mac app

拜拜、爱过 提交于 2019-12-02 16:44:57

问题


I want to show all compatable resolution for screen but getting only few resolutions, the resolutions which i am getting when passing nil to CGDisplayCopyAllDisplayModes same resolutions i am getting even if i pass kCGDisplayShowDuplicateLowResolutionModes to kCFBooleanTrue Below block which i am using.

+(NSArray *)menuItemsForCurrentDisplay :(CGDirectDisplayID)display{

    //Get Current mode

    CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(display);

    // Use a dictionary with title keys to avoid 'duplicates'
    NSMutableDictionary *menuItemsByTitle = [NSMutableDictionary new];

    // Get Number of Supported Displays
//    NSArray* numberOfDisplayModes  =  (__bridge NSArray *)(CGDisplayCopyAllDisplayModes ( display, nil ));

    CFStringRef keys[1] = { kCGDisplayShowDuplicateLowResolutionModes };
    CFBooleanRef values[1] = { kCFBooleanTrue };

    CFDictionaryRef options = CFDictionaryCreate(kCFAllocatorDefault, (const void**) keys, (const void**) values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks );

    NSArray* numberOfDisplayModes  =  (__bridge NSArray *)CGDisplayCopyAllDisplayModes(display, options);
    for (int i = 0; i < numberOfDisplayModes.count; i++) {

        if (CGDisplayModeIsUsableForDesktopGUI((__bridge CGDisplayModeRef)(numberOfDisplayModes[i]))) {


            DisplayModeMenuItem *menuItem = [[DisplayModeMenuItem alloc] initWithCustomDisplay:display andMode:(__bridge CGDisplayModeRef)(numberOfDisplayModes[i])];
            DisplayModeMenuItem *previousMenuItem = menuItemsByTitle[menuItem.title];

            if (previousMenuItem == nil) {
                if (currentMode == (__bridge CGDisplayModeRef)(numberOfDisplayModes[i])|| previousMenuItem.state == NSOnState) {
                    [menuItem setState:NSOnState];
                }

                menuItemsByTitle[menuItem.title] = menuItem;
            }else if ((__bridge CGDisplayModeRef)(numberOfDisplayModes[i]) == currentMode ){

                [menuItem setState:NSOnState];
            }
        }

    }

     CFRelease(options);
    CGDisplayModeRelease(currentMode);
    NSLog(@"menuItemsByTitle %@",[menuItemsByTitle allValues]);
    return [[menuItemsByTitle allValues] sortedArrayUsingSelector:@selector(customCompare:)];


}

来源:https://stackoverflow.com/questions/55650921/how-to-show-all-supported-resolutions-for-display-in-mac-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!