Printing(Chapter 27 of Cocoa Programming for Mac OS X)

  1  #import  " PeopleView.h "
  2  #import  " Person.h "
  3 
  4  @implementation PeopleView
  5 
  6  -  (id)initWithPeople:(NSArray  * )persons
  7  {
  8      [super initWithFrame:NSMakeRect( 0 0 700 700 )];
  9      people  =  [persons copy];
 10      attributes  =  [[NSMutableDictionary alloc] init];
 11      NSFont  * font  =  [NSFont fontWithName: @" Monaco "  size: 12.0 ];
 12      lineHeight  =  [font capHeight]  *   1.7 ;
 13      [attributes setObject:font forKey:NSFontAttributeName];
 14       return  self;
 15  }
 16 
 17  -  (id)initWithFrame:(NSRect)frame
 18  {
 19      self  =  [super initWithFrame:frame];
 20       if  (self) {
 21           //  Initialization code here.
 22      }
 23      
 24       return  self;
 25  }
 26 
 27  -  ( void )dealloc
 28  {
 29      [people release];
 30      [attributes release];
 31      [super dealloc];
 32  }
 33 
 34  #pragma  mark Pagination
 35 
 36  -  (BOOL)knowsPageRange:(NSRange  * )range
 37  {
 38      NSPrintOperation  * po  =  [NSPrintOperation currentOperation];
 39      NSPrintInfo  * printInfo  =  [po printInfo];
 40      pageRect  =  [printInfo imageablePageBounds];
 41      NSRect newFrame;
 42      newFrame.origin  =  NSZeroPoint;
 43      newFrame.size  =  [printInfo paperSize];
 44      [self setFrame:newFrame];
 45      
 46      linesPerPage  =  pageRect.size.height  /  lineHeight;
 47      
 48      range -> location  =   1 ;
 49      range -> length  =  [people count]  /  linesPerPage;
 50       if ([people count]  %  linesPerPage)
 51      {
 52          range -> length  =  range -> length  +   1 ;
 53      }
 54       return  YES;
 55  }
 56 
 57  -  (NSRect)rectForPage:(NSInteger)page
 58  {
 59      currentPage  =  page  -   1 ;
 60       return  pageRect;
 61  }
 62 
 63  #pragma  mark Drawing
 64 
 65  -  (BOOL)isFlipped
 66  {
 67       return  YES;
 68  }
 69 
 70  -  ( void )drawRect:(NSRect)dirtyRect
 71  {
 72      NSRect nameRect;
 73      NSRect raiseRect;
 74      raiseRect.size.height  =  nameRect.size.height  =  lineHeight;
 75      nameRect.origin.x  =  pageRect.origin.x;
 76      nameRect.size.width  =   200.0 ;
 77      raiseRect.origin.x  =  NSMaxX(nameRect);
 78      raiseRect.size.width  =   100.0 ;
 79      
 80       int  i;
 81       for (i = 0  ;i < linesPerPage; i ++ )
 82      {
 83           int  index  =  (currentPage  *  linesPerPage)  +  i;
 84           if (index  >=  [people count])
 85          {
 86               break ;
 87          }
 88          Person  * =  [people objectAtIndex:index];
 89          
 90          nameRect.origin.y  =  pageRect.origin.y  +  (i  *  lineHeight);
 91          NSString  * nameString  =  [NSString stringWithFormat: @" %2d %@ " , index, [p personName]];
 92          [nameString drawInRect:nameRect withAttributes:attributes];
 93          
 94          raiseRect.origin.y  =  nameRect.origin.y;
 95          NSString  * raiseString  =  [NSString stringWithFormat: @" %4.lf%% " , [p expectedRaise]];
 96          [raiseString drawInRect:raiseRect withAttributes:attributes];
 97      }
 98  }
 99 
100  @end

转载于:https://www.cnblogs.com/zhtf2014/archive/2011/03/14/1983454.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值