2008-11-24 22 views
59

मेरा कोको ऐप कुछ छोटी गतिशील रूप से जेनरेट की गई विंडोज़ की आवश्यकता है। मैं प्रोग्रामटाइम रनटाइम पर कोको विंडोज कैसे बना सकता हूं?मैं कोको विंडो प्रोग्रामेटिक रूप से कैसे बना सकता हूं?

यह अब तक मेरा गैर-कार्य प्रयास है। मुझे कोई परिणाम नहीं दिखता है।

NSRect frame = NSMakeRect(0, 0, 200, 200); 
NSUInteger styleMask = NSBorderlessWindowMask; 
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; 

NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreRetained defer:false]; 
[window setBackgroundColor:[NSColor blueColor]]; 
[window display]; 

उत्तर

125

समस्या यह है कि आप प्रदर्शन कॉल करने के लिए नहीं करना चाहते, तो आप या नहीं, आप खिड़की कुंजी खिड़की बनना चाहते हैं पर निर्भर करता है या तो makeKeyAndOrderFront या orderFront कॉल करना चाहते हैं। आपको शायद NSBackingStoreBuffered का भी उपयोग करना चाहिए।

इस कोड को स्क्रीन के नीचे बाईं ओर अपने सीमाहीन, नीले खिड़की पैदा करेगा:

NSRect frame = NSMakeRect(0, 0, 200, 200); 
NSWindow* window = [[[NSWindow alloc] initWithContentRect:frame 
        styleMask:NSBorderlessWindowMask 
        backing:NSBackingStoreBuffered 
        defer:NO] autorelease]; 
[window setBackgroundColor:[NSColor blueColor]]; 
[window makeKeyAndOrderFront:NSApp]; 

//Don't forget to assign window to a strong/retaining property! 
//Under ARC, not doing so will cause it to disappear immediately; 
// without ARC, the window will be leaked. 

आप makeKeyAndOrderFront या orderFront के लिए इस जो कुछ भी अपनी स्थिति के लिए उपयुक्त है बना सकते हैं।

+9

उस व्यक्ति को सिर्फ उत्सुकता है जिसने मेरा जवाब/इतना/अनुपयोगी इसे वोट देने के लिए पाया ... यह क्यों अनुपयोगी था? –

+31

डाउन-वोटर जेसन के बारे में चिंता न करें। मैंने आपका जवाब उपयोगी पाया। –

+0

इस उत्तर ने मुझे बहुत मदद की! – Eonil

2

यह वही है मैं अपने आप को ले कर आए हैं है:

NSRect frame = NSMakeRect(100, 100, 200, 200); 
NSUInteger styleMask = NSBorderlessWindowMask; 
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; 
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered defer:false]; 
[window setBackgroundColor:[NSColor blueColor]]; 
[window makeKeyAndOrderFront: window]; 

यह एक नीले रंग की विंडो दिखाता है। मुझे उम्मीद है कि यह इष्टतम दृष्टिकोण है।

+3

इसे जारी के लिए मत भूलना, और एक मजबूत या बनाए रखने संपत्ति निर्दिष्ट करने के लिए (बाद एआरसी के तहत विशेष रूप से महत्वपूर्ण है: http://stackoverflow.com/q/7198562/30461)। –

6

[window makeKeyAndOrderFront:self]; 

[window display]; 

के बजाय

का प्रयास करें? कि क्या आप के लिए लक्ष्य कर रहे हैं है

34

एक साइड नोट, यदि आप मुख्य रूप से मुख्य nib के बिना प्रोग्राम को तुरंत चालू करना चाहते हैं, तो आप नीचे के रूप में AppDelegate को तुरंत चालू कर सकते हैं। फिर आपके ऐप्स में सहायक फ़ाइलें/YourApp.plist मुख्य निब बेस फ़ाइल/MainWindow.xib इस प्रविष्टि को हटाएं। फिर अपने ऐपडिलेगेट्स इनिट विधि में विंडो संलग्न करने के लिए जेसन कोको के दृष्टिकोण का उपयोग करें।

#import "AppDelegate.h": 

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    [NSApplication sharedApplication]; 

    AppDelegate *appDelegate = [[AppDelegate alloc] init]; 
    [NSApp setDelegate:appDelegate]; 
    [NSApp run]; 
    [pool release]; 
    return 0; 
} 
+4

वाह धन्यवाद। इस उत्तर के लिए लंबे समय से खोजा। उत्तम! नए उद्देश्य-सी 3.0 के साथ @autorelease {...} का उपयोग करने के लिए बेहतर – Binarian

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

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