Plain Cocoa coding
Posted: Sat Jun 07, 2014 9:17 pm
How to add a button or listbox to a cocoa window using plain API?
The window is also missing the delegate. In Objective-C I did it like this:
Code: Select all
CocoaMessage(@app,0,"NSApplication sharedApplication")
CocoaMessage(@win,0,"NSWindow alloc")
Debug app
Debug win
#NSBorderlessWindowMask = 0
#NSTitledWindowMask = 1 << 0
#NSClosableWindowMask = 1 << 1
#NSMiniaturizableWindowMask = 1 << 2
#NSResizableWindowMask = 1 << 3
#NSTexturedBackgroundWindowMask = 1 << 8
size.NSSize
size\width = 800
size\height = 600
rect.NSRect
rect\origin\x = 100
rect\origin\y = 100
rect\size\width = 800
rect\size\height = 600
#MASK = #NSTitledWindowMask | #NSClosableWindowMask | #NSMiniaturizableWindowMask | #NSResizableWindowMask
CocoaMessage(0,win,"initWithContentRect:@",@rect,"styleMask:",#MASK,"backing:",2,"defer:",#NO)
CocoaMessage(0,win,"makeKeyWindow")
CocoaMessage(0,Win,"makeKeyAndOrderFront:",app)
CocoaMessage(0,win,"setTitle:$",@"My Window")
CocoaMessage(0,win,"setMinSize:",size)
CocoaMessage(0,win,"center")
CocoaMessage(0,win,"update")
CocoaMessage(0,win,"display")
CocoaMessage(0,win,"setPreventsApplicationTerminationWhenModal:",#NO)
CocoaMessage(0,win,"setReleasedWhenClosed:",#YES)
; how to add a button or listview here?
CocoaMessage(0,app,"run")
;CocoaMessage(0,app,"runModalForWindow:",win)
;CocoaMessage(0,app,"terminate:",app)
Code: Select all
#include <cocoa/cocoa.h>
@interface MyWindowDelegate : NSObject<NSWindowDelegate>
@end
@implementation MyWindowDelegate
- (BOOL)windowShouldClose:(id)window {
[window release];
NSApplication *app = [NSApplication sharedApplication];
[app terminate:app];
return YES;
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
return NSTerminateNow;
}
@end
int CreateWindow(int x, int y, int width, int height, String title) {
NSApplication *app = [NSApplication sharedApplication];
unsigned int styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask;
NSWindow *w1 = [ [NSWindow alloc]
initWithContentRect:NSMakeRect( x, y, width, height )
styleMask:styleMask
backing:NSBackingStoreBuffered
defer:NO
];
MyWindowDelegate *delegate = [[MyWindowDelegate alloc] init];
[w1 setDelegate:delegate];
[w1 makeKeyWindow];
[w1 makeKeyAndOrderFront:app];
[w1 setTitle:title.ToNSString()];
[w1 setAcceptsMouseMovedEvents:YES];
[w1 setPreventsApplicationTerminationWhenModal:NO];
[w1 setReleasedWhenClosed:YES];
[w1 center];
[w1 update];
[w1 display];
//[app runModalForWindow:w1];
[app run];
//[w1 release];
return 0;
}