让我们来写一个抓屏程序吧。当然,你知道只要按command+shift+3就可以抓取当前屏幕对吧?本文介绍如何用cocoa程序来实现这一功能。

- (NSImage*) captureScreenImageWithFrame: (NSRect) frame
{
// 获取屏幕的图形端口
CGrafPtrscreenPort =CreateNewPort();
RectscreenRect;
GetPortBounds(screenPort, &screenRect);
// 创建一个临时窗口做为容器
NSWindow*grabWindow = [[NSWindowalloc]initWithContentRect: frame

styleMask:NSBorderlessWindowMask

backing:NSBackingStoreRetained

defer:NO

screen:nil];
CGrafPtrwindowPort = GetWindowPort ([grabWindowwindowRef]);
RectwindowRect;
GetPortBounds(windowPort, &windowRect);
SetPort(windowPort);
// 将屏幕内容复制到临时窗口
CopyBits(GetPortBitMapForCopyBits(screenPort),
GetPortBitMapForCopyBits(windowPort),
&screenRect,
&windowRect,
srcCopy,
NULL);
// 将窗口内容复制到NSImage
NSView*grabContentView = [grabWindowcontentView];
[grabContentViewlockFocus];
NSBitmapImageRep*screenRep;
screenRep = [[NSBitmapImageRepalloc]initWithFocusedViewRect: frame];
[grabContentViewunlockFocus];
NSImage*screenImage = [[NSImagealloc]initWithSize: frame.size];
[screenImageaddRepresentation: screenRep];

// Clean up

[grabWindowclose];
DisposePort(screenPort);
return(screenImage);
}// captureScreenImageWithFrame