2016-01-05 12 views
8

मुझे ओएस एक्स के लिए एक प्रोग्राम में "पूर्ण स्क्रीन ओवरले विंडो" बनाने की आवश्यकता है। निश्चित रूप से, खिड़की को अन्य सभी विंडोज़ के शीर्ष पर होना चाहिए, जिसमें गैर-अधिकतम-विंडो रिक्त स्थान में मेनू बार के शीर्ष पर भी शामिल होना चाहिए , और अधिकतम खिड़कियों के शीर्ष पर अपनी जगहों पर, और एक्सपोज़ के दौरान शीर्ष पर। इसे "परिवर्तन स्थान" एनिमेशन में भाग नहीं लेना चाहिए; यानी, इसकी स्थिति हर समय भौतिक स्क्रीन के सापेक्ष तय की जानी चाहिए। (खिड़की अर्द्ध पारदर्शी होगी और माउस घटनाओं को अनदेखा कर देगी, लेकिन मुझे पता है कि यह पहले से कैसे करें।)मैं कोको विंडो कैसे बना सकता हूं जो पूर्णस्क्रीन विंडो के शीर्ष पर दिखाई देता है?

मैं इस "ओवरले विंडो" व्यवहार को कैसे प्राप्त करूं? मैं इतनी दूर मिल गया है:

  • मैं इतना window.levelCGWindowLevelKey(kCGMaximumWindowLevelKey) को स्थापित करना चाहिए कि यह एक ही स्थान में अन्य विंडो के शीर्ष पर हमेशा होता है।
  • मुझे NSWindowCollectionBehaviorStationary सेट करना चाहिए ताकि खिड़की एक्सपोज़ के दौरान जगह पर रहें।

मुझे नहीं पता कि रिक्त स्थान स्विच करते समय इस व्यवहार को कैसे रखा जाए। मैंने सोचा कि मैं NSWindowCollectionBehaviorCanJoinAllSpaces स्थापित करना चाहिए, लेकिन अपने व्यवहार दो समस्याएं हैं:

  • खिड़की अन्य पूर्णस्क्रीन विंडो के शीर्ष पर प्रकट नहीं होता।
  • खिड़की सभी जगहों पर एक ही स्थान पर रहने के बजाय, प्रत्येक स्थान पर डुप्लिकेट है। अंतरिक्ष-स्विच एनीमेशन की वजह से यह महत्वपूर्ण है।

I have heard that an NSPanel would help me, लेकिन मैं यह काम करने में सक्षम नहीं हूं, या तो।

संक्षेप में, ओएस एक्स में एक पूर्णस्क्रीन विंडो के शीर्ष पर एक विंडो दिखाई दे सकती है? क्या आप एक छोटा, पूर्ण उदाहरण प्रदान कर सकते हैं?

+0

मुझे नहीं लगता कि आपको इसका उत्तर मिल गया है? मुझे एक और ऐप की पूर्ण-स्क्रीन विंडो के शीर्ष पर एक विंडो प्रदर्शित करने की आवश्यकता है। –

+0

@ मार्कबस्से मुझे वास्तव में 'एनएसपीनेल' का उपयोग करके एक समाधान मिला। जब मैं एक पल – jameshfisher

+0

@jameshfisher है तो क्या आप अपना समाधान साझा कर सकते हैं, मैं कुछ नमूना कोड के साथ प्रश्न का उत्तर देने का प्रयास करूंगा? मुझे एक ही समस्या है, और मैंने वर्णन में जो भी बताया है, मैंने कोशिश की है लेकिन दुर्भाग्यवश वे काम नहीं करते हैं। –

उत्तर

1

आपको window.level = CGWindowLevelForKey(.MaximumWindowLevelKey) का उपयोग करना चाहिए।

मैं रिक्त स्थान के साथ आपकी सहायता नहीं कर सकता।

+0

आह, हाँ, मैं पहले से ही ऐसा कर रहा था - अस्पष्ट होने के लिए खेद है। मैंने अपना प्रश्न संपादित कर लिया है। – jameshfisher

0

यहां मेरा समाधान है, यह ठीक है।

NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES]; 
[test_panel setReleasedWhenClosed:YES]; 
[test_panel setHidesOnDeactivate:NO]; 
[test_panel setFloatingPanel:YES]; 
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask]; 
[test_panel setLevel:kCGMainMenuWindowLevel-1]; 
[test_panel setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary]; 
[test_panel setCanBeVisibleOnAllSpaces:YES]; 
[test_panel center]; 
[test_panel orderFront:nil]; 
संबंधित मुद्दे