2012-07-08 15 views
6

मेरा प्रश्न काफी सरल है:ओएस एक्स में डॉक प्रासंगिक मेनू में आइकन दिखाएं?

गोदी पर ऐप्स आइकन के लिए एक कस्टम मेनू का उपयोग करने के लिए, NSApplicationDelegate की - (NSMenu*) applicationDockMenu: (id) sender; मेनू कि गोदी प्रदर्शित करेगा वापस जाने के लिए है।

setImage का उपयोग NSMenuItem पर, आप मेनू में आइकन जोड़ सकते हैं। वे सामान्य मेनू पर दिखाई देते हैं, लेकिन ऐप के डॉक आइकन के प्रासंगिक मेनू में नहीं।

फिर ऐप्पल ने अपने डॉक प्रासंगिक मेनू में हाल ही में खोले गए फ़ाइलों की सूची में आइकन दिखाने के लिए क्विकटाइम, एक्सकोड, पूर्वावलोकन का प्रबंधन कैसे किया?

Thx।

उत्तर

3

हाल की फाइल सूची वास्तव में मानक डॉक आइकन मेनू का हिस्सा है। इसे अपने ऐप में उपयोग करने के लिए, आपको NSDocument-आधारित एप्लिकेशन बनाना चाहिए। NSDocument का उपयोग करके, आपको हाल ही में फ़ाइलें मेनू/व्यवहार मुफ्त में मिल जाएगा।

आपके आवेदन NSDocument के आधार पर नहीं किया जा सकता है, तो आप निर्देश दे सकते हैं कोको हाल ही में एक दस्तावेज़ों की सूची URL के आधार पर बनाए रखने के लिए:

NSDocumentController *docController = [NSDocumentController sharedDocumentController]; 
[docController noteNewRecentDocumentURL:locationOfMyRecentFile1]; 
[docController noteNewRecentDocumentURL:locationOfMyRecentFile2]; 
[docController noteNewRecentDocumentURL:locationOfMyRecentFile3]; 

ध्यान दें कि वर्तमान में, -noteNewRecentDocumentURL: केवल file:// यूआरएल का समर्थन करता है (जो आप एक से बना सकते हैं +[NSURL fileURLWithPath:] के साथ पथ।) भविष्य में, इसके व्यवहार संभवतः अन्य योजनाओं के साथ यूआरएल की अनुमति देने के लिए बदल जाएगा।

1

यहाँ मेरी समझ है, जो कार्यान्वयन विवरण के लिए आंशिक रूप से अनुमान पर आधारित है और संबंधित है:

डॉक एक अलग प्रक्रिया में चलाता है, और आप डॉक करने के लिए अपने आवेदन से प्रक्रिया सीमा पार तुच्छता से एक मनमाना NSImage पारित नहीं हो सकता । केवल दो प्रकार की छवियां हैं जिन्हें ठीक से पारित किया जा सकता है: मानक सिस्टम आइकन, और आपके संसाधन बंडल में आइकन। लेकिन मुझे नहीं लगता कि NSImage इनमें से किसी के लिए काम करने के लिए जरूरी चीजें हैं।

So you're going to have to use Carbon. विशेष रूप से, आप या तो kMenuSystemIconSelectorType साथ SetMenuItemIconHandle उपयोग करने की आवश्यकता (शामिल किया गया कार्बन IconRef रों, GetIconRef के साथ प्राप्त) या kMenuIconResourceType (CFString रों है कि आपके आवेदन बंडल के संसाधन फ़ोल्डर में एक .icns फ़ाइल को देखें)। (आप सिस्टम आइकन उपयोग कर रहे हैं, GetIconRef के लिए)

प्रासंगिक हेडर <HIToolbox/MacApplication.h> (GetApplicationDockTileMenu के लिए), <HIToolbox/Menus.h> (SetMenuItemIconHandle के लिए) और <HIServices/Icons.h>, कर रहे हैं।

untested है, लेकिन यह कुछ इस तरह दिखना चाहिए:

#include <Carbon/Carbon.h> 

SetMenuItemIconHandle(
    GetApplicationDockTileMenu(), 
    [dockMenu indexOfItem:dockMenuItem], 
    kMenuIconResourceType, 
    (Handle) CFSTR("icon.icns") 
); 

यह इस आसान नहीं हो सकता है; इनमें से कुछ केवल 32-बिट हो सकते हैं।

+0

"64-बिट अनुप्रयोगों के लिए उपलब्ध नहीं है।" :( – Wevah

+0

कुछ और होना चाहिए, QuickTime, पूर्वावलोकन और XCode 64-बिट ऐप्लिकेशन हैं। –

+0

@MatthieuRiegler कि कुछ NSDocumentController' करता है कि 'नहीं है? यह एक निजी एप्पल एपीआई का उपयोग हो सकता है। –

संबंधित मुद्दे