当前位置:主页 > 开发频道 > 新手教学 > 起步教学 >

Cocoa系列教学四:Sizing Policy 和其他

时间: 2009-06-11 19:27 点击:

上次我们的程序在Window中创建了一个Button,如果这个Button是作为Window的ContentView的时候, 当你改变窗口的时候, 这个Button的大小也跟着改变,而且总是充满了整个Window,但是如果你通过

上次我们的程序在Window中创建了一个Button,如果这个Button是作为Window的ContentView的时候, 当你改变窗口的时候, 这个Button的大小也跟着改变,而且总是充满了整个Window,但是如果你通过NSView addSubview:把这个Button添加到窗口中的时候, 当你改变窗口大小的时候, 这个Button的位置和大小始终不变,所以当你的窗口的宽度小于Button的Left时,Button就消失了。

熟悉Java或者Unix下面GUI编程的人可能会使用Layout机制来解决这个问题,熟悉Windows的人可能会想到使用OnSize事件来处理这个问题, Cocoa的确在窗口或者Parent View的大小改变的时候发送通知,但是在Cocoa中我们还有另外一种处理方法,这个方法可以称作Sizing Policy,意思是在窗口改变的时候, 对应的Child View或者Control应该如何响应这个改变。

NSView类有一个方法setAutoresizingMask:这个方法可以用来控制NSView对父窗口或者Parent View的Size Change事件做什么样的处理。这个方法有一个参数,可以是下面列出的常量的一个或者几个的组合。

  1.    NSViewNotSizable     = 0,
  2.    NSViewMinXMargin     = 1,
  3.    NSViewWidthSizable   = 2,
  4.    NSViewMaxXMargin     = 4,
  5.    NSViewMinYMargin     = 8,
  6.    NSViewHeightSizable  = 16,
  7.    NSViewMaxYMargin     = 32

通过这个函数,我们就可以控制程序中的Button如何响应Window的Size Change事件了,下面我们看看修改后的main函数。

  1. int main(int argc, char *argv[])
  2. {
  3.     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  4.     [NSApplication sharedApplication];
  5.    
  6.     //Create main window
  7.     NSRect rc = NSMakeRect(0, 0, 400, 200);
  8.     NSUInteger uiStyle = NSTitledWindowMask | NSResizableWindowMask | NSClosableWindowMask;
  9.     NSBackingStoreType backingStoreStyle = NSBackingStoreBuffered;
  10.     NSWindow* win = [[NSWindow alloc] initWithContentRect:rc styleMask:uiStyle backing:backingStoreStyle defer:NO];
  11.     [win setTitle:@"HelloWin Test"];
  12.     NSButton* button = [[NSButton alloc] initWithFrame:NSMakeRect(160, 20, 80, 35)];
  13.     [button setTitle:@"Quit"];
  14.  
  15.     NSView* contentView = [win contentView];
  16.     MyController* controller = [[MyController alloc] init];
  17.  
  18.     [[win contentView] addSubview:button];
  19.     [contentView setAutoresizesSubviews:YES];
  20.     [button setAutoresizingMask:NSViewMaxXMargin | NSViewMinXMargin | NSViewMaxYMargin

    顶一下(17)

    89.5%

    踩一下(2)

    10.5%

    发表评论

    评价: 中立 好评 差评 请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

    表情:

论坛新帖 进入论坛...