2013-01-24 65 views

回答

5

你的答案就在石英。

#include <ApplicationServices/ApplicationServices.h> 

CGError CGDisplayRegisterReconfigurationCallback (
    CGDisplayReconfigurationCallBack proc, 
    void *userInfo 
); 

然後你的PROC樣子:

MyCGDisplayReconfigurationCallBack(
    CGDirectDisplayID display, 
    CGDisplayChangeSummaryFlags flags, 
    void *userInfo) { 

    if (flags & kCGDisplayAddFlag || flags & kCGDisplayRemoveFlag) { 
     DoStuff(display, flags, userInfo); 
    } 
} 
+0

感謝您的幫助 – jakikiller

+1

該檢查可以優化爲易於閱讀的標誌和(kCGDisplayAddFlag | kCGDisplayRemoveFlag)。 – 2013-01-24 18:05:10

+0

或者你可以使用更高級別的通知:'NSApplicationDidChangeScreenParametersNotification' –

0

如果有人有興趣在雨燕2.3這樣做,我劃我的頭一會兒翻譯@iluvcapra的代碼:

let userData = UnsafeMutablePointer<ViewController>(Unmanaged.passUnretained(self).toOpaque()) //use the class name of your "self" for future reference inside the callback 
CGDisplayRegisterReconfigurationCallback({ (display: UInt32, flags: CGDisplayChangeSummaryFlags, userInfo: UnsafeMutablePointer<Swift.Void>) in 
    let mySelf = Unmanaged<ViewController>.fromOpaque(COpaquePointer(userInfo)).takeUnretainedValue() //change here to your class name 
    if flags.rawValue & CGDisplayChangeSummaryFlags.AddFlag.rawValue > 0 { 
     //do stuff on connect 
     mySelf.someFunction() 
    } else if flags.rawValue & CGDisplayChangeSummaryFlags.RemoveFlag.rawValue > 0 { 
     //do stuff on disconnect 
    } 
}, userData) 
相關問題