2012-06-06 15 views
5

मेरे पास एक पारदर्शी NSWindow है जो हर जगह उपयोगकर्ता की स्क्रीन का अनुसरण करता है (NSWindow प्रत्येक ऐप के सामने रहता है, इससे कोई फर्क नहीं पड़ता कि यहां तक ​​कि पूर्णस्क्रीन ऐप्स भी)।
उस NSWindow में मेरे पास mouseDown ईवेंट है जो पॉपअप दिखाता है। मान लें कि मैं पूर्णस्क्रीन मोड में सफारी पर हूं और मेरे पास मेरी खिड़की है, मैं सफारी पर क्लिक करता हूं और मैं अपनी खिड़की पर फिर से क्लिक करता हूं: कुछ नहीं होता है, माउसडाउन नहीं होता है। मुझे फिर से क्लिक करना है ताकि mouseDown ईवेंट ट्रिगर हो।
मैं हमेशा सक्रिय होने के लिए अपने NSWindow को कैसे मजबूर कर सकता हूं इसलिए मुझे mouseDown को ट्रिगर करने के लिए इसे 2x पर क्लिक करने की आवश्यकता नहीं है जब मैं पृष्ठभूमि ऐप पर क्लिक करता हूं और फिर मेरी विंडो में क्लिक करता हूं?
धन्यवाद!एनएसविंडो को हमेशा सक्रिय/केंद्रित होने के लिए कैसे मजबूर करें?

+0

आप अपनी खिड़की की पारदर्शिता पर विस्तृत कृपया सकते हैं के शीर्ष पर हमेशा अपनी खिड़की रखेंगे: यह पूरी तरह से पारदर्शी नहीं है, है यह? – Tim

+0

एक छवि –

उत्तर

2

यदि आप अपनी खिड़की के दृश्य में एक सीमा रहित एनएसबटन उदाहरण जोड़ते हैं और अपनी छवि को बटन की छवि के रूप में सेट करते हैं (और इसकी वैकल्पिक छवि के रूप में, इसे और अधिक सुंदर बनाने के लिए), यह बॉक्स से बाहर काम करेगा: बस बटन की कार्रवाई को कनेक्ट करें आपके ऐप प्रतिनिधि (या ऑब्जेक्ट जहां आप क्लिक एक्शन को संसाधित करना चाहते हैं) के लिए विधि। छवि (यानी बटन) पर एक क्लिक तब बटन की क्रिया विधि को ट्रिगर करेगा, इससे कोई फर्क नहीं पड़ता कि कौन सी विंडो सक्रिय है।

+0

धन्यवाद! यह वैसे ही काम करता है जिस तरह से मैं चाहता था! इतना आसान और मैंने नोटिस नहीं किया। –

2

मुझे यकीन है कि अगर यह है कि वास्तव में आप क्या चाहते हैं (यह काफी एक विस्तृत स्थापित करने खिड़की नहीं है), लेकिन, documentation से नहीं कर रहा हूँ:

डिफ़ॉल्ट रूप से, एक खिड़की में एक माउस-डाउन घटना है कि कुंजी विंडो नहीं है बस खिड़की को आगे लाती है और इसे कुंजी बनाती है; घटना NSView ऑब्जेक्ट पर भेजी गई है जिस पर माउस क्लिक होता है। NSViewYES लौटने के लिए acceptsFirstMouse: ओवरराइड करके प्रारंभिक माउस-डाउन ईवेंट का दावा कर सकता है।

इस विधि का तर्क माउस डाउन घटना है कि गैर-कुंजी खिड़की है, जो दृश्य वस्तु निर्धारित करने के लिए कि क्या यह माउस घटना प्राप्त करने के लिए और संभवतः पहले प्रत्युत्तर बन चाहता है की जांच कर सकते में हुई है। आप इस विधि के डिफ़ॉल्ट व्यवहार चाहते हैं, उदाहरण के लिए, एक नियंत्रण जो विंडो में चयनित ऑब्जेक्ट को प्रभावित करता है।

हालांकि, कुछ मामलों में यह उचित इस तरह के नियंत्रण कि mouseDown: संदेश प्राप्त होने चाहिए, तब भी जब खिड़की निष्क्रिय है के लिए के रूप में, इस व्यवहार को ओवरराइड करने के लिए है। इस क्लिक-थ्रू व्यवहार का समर्थन करने वाले नियंत्रणों के उदाहरण विंडो के शीर्षक-बार बटन हैं।

या आप

- (void)sendEvent:(NSEvent *)theEvent 

के साथ नगण्य और देखें कि क्या आप एक कस्टम तरह से घटनाओं संभाल कर सकते हैं की कोशिश कर सकते।

+0

के साथ पूरी तरह से पारदर्शी मैंने दस्तावेज़ में कुछ शोध किया लेकिन मुझे कुछ भी नहीं मिला जो काम करता था:/ –

+0

DID आप कोशिश कर रहे हैं -सेप्ट्स फर्स्टमाउस: हाँ वापस करें? यह आपके खिड़की में तुरंत उपयोग करने योग्य नियंत्रण बनाएगा, भले ही यह कुंजी न हो, जो आप चाहते हैं कि किस तरह की आवाज़ें। – Vervious

+0

एनओपी, जिस तरह से मैं काम करना चाहता हूं काम नहीं कर रहा हूं। मैं चाहता हूं कि खिड़की हर समय सक्रिय/केंद्रित हो। –

-2

मुझे लगता है कि आपको वास्तव में क्या करना चाहिए, एनएसपीनल (एक फ़्लोटिंग पैलेट - एक विशेष प्रकार का एनएसविंडो) का उपयोग करना है जो वही करेगा जो आप वैसे ही करेंगे जो ओएस के अनुरूप है, जो इच्छित व्यवहार से लड़ने की कोशिश करने के बजाय है।

यहाँ NSPanel प्रलेखन है:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nspanel_Class/Reference/Reference.html

और यहाँ कुछ उपयोगी और सारगर्भित जानकारी है:

http://cocoadev.com/wiki/NSPanel

डिफ़ॉल्ट रूप से, एक NSPanel गायब हो जाएगा अनप्रयोग के प्रयोग में है, लेकिन आप इसे बंद कर सकते हैं।

मैं इसे और अधिक पूरी तरह से नहीं डालने के लिए क्षमा चाहता हूं ... समय के लिए दबाया गया।

संपादित करें:

ध्यान दें कि आप शायद के रूप में बस इच्छित अपनी खिड़की व्यवहार करने के लिए प्राप्त कर सकते हैं:,, acceptsFirstMouse अधिभावी द्वारा

"NSView एक प्रारंभिक माउस डाउन घटना दावा कर सकते हैं तथापि: हाँ वापस जाने के लिए। "

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html

आप किसी भी NSView उपवर्ग "सक्रियण क्लिक" को छोड़ के साथ ऐसा करने की आवश्यकता होगी।

+0

यह nswindow की तरह व्यवहार कर रहा है। पृष्ठभूमि विंडो पर क्लिक करने के बाद मुझे इसे दो बार स्पर्श करना होगा:/ –

+0

यह डिफ़ॉल्ट व्यवहार है जिसे आपको ओवरराइड करना है। यदि आप सिस्टम कैरेक्टर व्यूअर को देखते हैं - एक एनएसपीनल - यह पहले क्लिक को स्वीकार करता है और सामने रहता है। यहां दस्तावेज़ देखें: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html – podperson

1

यह मेरे लिए काम किया, उम्मीद है कि उपयोगी होगा, यह सभी अनुप्रयोगों

[self.window makeKeyAndOrderFront:nil]; 
[self.window setLevel:NSStatusWindowLevel];