1

displayChanged次のコードで関数が起動されないのはなぜですか?

#import <Cocoa/Cocoa.h>

static void displayChanged(CGDirectDisplayID displayID, CGDisplayChangeSummaryFlags flags, void *userInfo) {
    NSLog(@"%@, %@", displayID, flags); 
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        CGDisplayRegisterReconfigurationCallback(displayChanged, NULL);

        CFRunLoopRun();
    }
    return 0;
}

外付けディスプレイを物理的に取り外して (そして差し込んで) いますが、機能が実行されません。なんで?

4

3 に答える 3

0

AppKitを使用している(そして実行中のNSApplicationイベントループがある)場合は、NSApplicationDidChangeScreenParametersNotification通知をリッスンできます。-applicationDidChangeScreenParameters:または、アプリケーションデリゲートにメソッドを実装することもできますが、これは同じことです。

于 2013-03-21T19:22:30.053 に答える
0

仕事に行けなかっCGDisplayRegisterReconfigurationCallbackたので、代わりに分散通知を使用しました。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.BezelServices.BMDisplayHWReconfiguredEvent" object:nil queue:nil usingBlock:^(NSNotification *notification) {
            NSLog(@"Displays changed!");
        }];

        CFRunLoopRun();
    }
    return 0;
}
于 2013-03-21T18:53:49.303 に答える