在Xcode里实现一个窗口程序 代码实现

移动开发 iOS
本文主要讲解一下如何通过编写代码的方式来实现一个窗口程序,当然这个程序十分的简单,我们先来看内容。

Xcode里实现一个窗口程序 代码实现是本文要介绍的内容,主要讲解一下如何通过编写代码的方式来实现一个窗口程序,了解XCodeInterface builder为我们的开发工作做了哪些工作。

cocoa的坐标系有点和习惯不一样,习惯了第四象限坐标系,再用***象限,感觉很奇怪。这次主要讲解一下如何通过编写代码的方式来实现一个窗口程序,当然这个程序十分的简单,不过它演示了一些我们应该了解的东西,因此应该可以更好的帮助我们了解XCodeInterface builder为我们的开发工作做了哪些工作。

大部分讲解Cocoa编程的书都会用到Xcodeinterface builder,这两个工具的结合是开发Cocoa应用程序的***选择, 但是当中往往隐藏了许多细节的东西,为了对Cocoa的运作方式有更好的了解,我决定用代码来实现一些Interface Builder中Nib文件实现的部分功能,以此来研究Cocoa的运作方式。

下面我们先看看这个最简单的HelloWin的源代码。

  1. #import <Cocoa/Cocoa.h> 
  2.  
  3. int main(int argc, char* argv[])  
  4. {  
  5.     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];  
  6.     NSApplication* app = [NSApplication sharedApplication];  
  7.  
  8.     //Create the main window  
  9.     NSRect rc = NSMakeRect(0, 0, 800, 600);  
  10.     NSUInteger uiStyle = NSTitledWindowMask | NSResizableWindowMask | NSClosableWindowMask;  
  11.     NSBackingStoreType backingStoreStyle = NSBackingStoreBuffered;  
  12.     NSWindow* win = [[NSWindow alloc] initWithContentRect:rc styleMask:uiStyle backing:backingStoreStyle defer:NO];  
  13.     [win setTitle:@"HelloWin Test"];  
  14.     [win makeKeyAndOrderFront:win];  
  15.     [win makeMainWindow];  
  16.  
  17.     //Start the event loop by calling NSApp run  
  18.     [NSApp run];  
  19.     [pool drain];  
  20.     return 0;  

编译命令如下:

  1. gcc HelloWin.m -framework Cocoa -o HelloWin 

所 有的Cocoa程序都要连接Cocoa这个Framework,Cocoa Framework会自动引用其他需要的framework,比如Foundation Framework。这个编译指令生成的程序名字叫HelloWin, 你可以通过在终端下执行下面的命令来看看这个程序的运行情况。

  1. ./HelloWin 

窗口显示如图所示:

[[36913]]

你会发现这个程序在Dock上面没有图标,在菜单栏上没有菜单, 虽然你可以关掉这个窗口, 但是在终端的提示中可以看到这个应用程序没有退出, 现在在终端按ctrl+C结束这个应用程序。

下 面来具体看一下这个简单的程序,首先我们import了Cocoa这个Framework,然后创建了一个NSAutoreleasePool的实例,接 下来我们通过NSApplication的类方法sharedApplication得到了一个NSApplication对象,并将这个对象赋给一个 NSApplication类的实例, 其实这个赋值是不需要的, 因为在调用sharedApplication的时候, Cocoa设置了另外一个全局的NSApplication对象的实例, NSApp,所以你可以看到在后面调用run方法的Receiver是NSApp,而没有用app。所以你可以简单的在这里直接调用

  1. [NSApplication sharedApplication]; 

以后在需要NSApplication对象的时候直接使用NSApp就可以了。

在 得到了NSApp之后,程序开始创建窗口,因为这个是窗口也是程序的主窗口(mainWindow), 所以在创建这个窗口的时候,针对窗口的styleMask也需要满足一定的条件。如果一个窗口想成为主窗口,必须是具有标题 (NSTitleWidowMask)或者拥有可改变大小属性(NSResizableWindowMask)。另外如果你希望这个窗口能够被关掉,那么 NSClosableWindowMask也是需要的,否则尽管这个窗口能显示出来, 但是你会发现标题栏上的关闭按钮是灰色的。

在初始 化窗口之后,通过setTitle设置窗口的标题,对makeKeyAndOrderFront:的调用是一个关键,因为一个窗口想成为 mainWindow,必须是可见的,在调用这个方法之后,我们就可以通过makeMainWindow方法来让这个窗口成为程序的主窗口。

在有了主窗口之后, 我们可以调用NSApplication的run方法来启动程序的消息循环,到这时应用程序就开始运行了, 也能接受各种应用程序或者窗口的事件了。

这 里有个地方需要提示一下,我们在代码中看到设定的初始Rect起点是(0,0),但是却显示在屏幕的左下角,这个问题是因为Mac上缺省的坐标系与 Windows下面的不同,Mac上的坐标系原点在屏幕的左下角,所以整个屏幕是出于***象限的,这与我们在中学时候学到的知识是一致的,以后会讲到这个问题的。

小结:在Xcode里实现一个窗口程序 代码实现的内容介绍完了,希望本文对你有所帮助。

原帖地址  http://www.cocoachina.com/bbs/read.php?tid-23.html

责任编辑:zhaolei 来源: Cocoa China
相关推荐

2009-08-14 00:55:21

C#程序编译

2014-04-29 15:08:26

PostgresMongoDB

2024-01-08 13:47:00

代码分析工具

2021-01-04 09:12:31

集合变量

2023-07-10 07:58:45

2016-03-08 09:52:22

xcode插件开发

2022-01-04 11:08:02

实现Localcache存储

2017-03-28 21:03:35

代码React.js

2022-01-26 16:30:47

代码虚拟机Linux

2022-06-29 09:02:31

go脚本解释器

2010-01-08 15:41:36

VB.NET窗口关闭

2011-07-06 18:10:20

Xcode 4 iPhone

2011-07-06 18:31:21

Xcode 4 iPhone 模拟器

2020-09-24 11:46:03

Promise

2022-07-13 15:31:29

手绘板canvas鸿蒙

2022-08-02 14:21:20

滑动验证码鸿蒙

2011-07-29 13:21:31

CTE递归存储过程真分页

2022-06-28 08:17:10

JSON性能反射

2020-12-09 11:32:10

CSS前端代码

2017-12-12 15:24:32

Web Server单线程实现
点赞
收藏

51CTO技术栈公众号