成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Cocoa教程:使用代碼創建窗口

移動開發 iOS
本文介紹了如何通過編寫代碼的方式來實現一個窗口程序,它演示了一些我們應該了解的東西,因此應該可以更好的幫助我們了解XCode和Interface Builder為我們的開發工作做了哪些工作。

這次主要講解一下如何通過編寫代碼的方式來實現一個窗口程序, 當然這個程序十分的簡單, 不過它演示了一些我們應該了解的東西,因此應該可以更好的幫助我們了解XCode和Interface Builder為我們的開發工作做了哪些工作。

大部分講解Cocoa編程的書都會用到Xcode和Interface Builder,這兩個工具的結合是開發Cocoa應用程序的***選擇, 但是當中往往隱藏了許多細節的東西,為了對Cocoa的運作方式有更好的了解,我決定用代碼來實現一些Interface Builder中Nib文件實現的部分功能,以此來研究Cocoa的運作方式。

下面我們先看看這個最簡單的HelloWin的源代碼。

 

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

 

編譯命令如下:

 

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

所有的Cocoa程序都要連接Cocoa這個Framework,Cocoa Framework會自動引用其他需要的framework,比如Foundation Framework。這個編譯指令生成的程序名字叫HelloWin, 你可以通過在終端下執行下面的命令來看看這個程序的運行情況。

 

  1. ./HelloWin 

窗口顯示如下

圖1

你會發現這個程序在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上的坐標系原點在屏幕的左下角,所以整個屏幕是出于***象限的,這與我們在中學時候學到的知識是一致的,以后會講到這個問題的。

不過目前這個程序不能關閉,這是因為我們還沒有處理相應的事件來讓應用程序退出,這個問題我們下次在說。

【編輯推薦】

  1. Cocoa教學:對比Windows OOP與Cocoa MVC
  2. Objective-C入門 簡介Cocoa框架
  3. iOS平臺Cocoa Touch層
責任編輯:佚名 來源: Cocoachina
相關推薦

2011-08-10 18:37:32

CocoaMac OS X

2011-08-10 19:33:09

Cocoa對象

2011-07-07 13:51:24

Cocoa 框架

2011-07-28 17:46:54

IOS Cocoa 用戶界面

2011-08-10 18:13:01

Cocoa文字字符串

2011-07-07 10:07:19

Cocoa 框架

2011-07-26 15:14:24

蘋果 Cocoa 內存

2011-08-15 14:27:51

CocoaRunLoop

2012-05-21 09:58:30

動態創建類Cocoa

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-06-08 15:14:46

Qt 教程

2011-07-20 14:46:59

Cocoa XML 文件

2011-08-10 16:27:07

Cocoa TouchPlist

2011-05-11 15:27:58

Windows OOPCocoa MVCCocoa

2011-08-15 15:26:20

iPhone開發CocoaXML

2011-07-07 13:39:14

Cocoa 框架

2011-07-28 14:55:21

Xcode 模板

2023-08-04 15:05:20

子窗口主窗口

2011-07-07 13:30:32

Cocoa Core

2011-07-28 18:25:27

Cocoa 異步請求 libxml2
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美国产精品一区 | 一区二区亚洲 | 欧美亚洲国语精品一区二区 | 久久久国产精品视频 | 日韩不卡一区二区 | 99在线免费观看视频 | 中文字幕高清免费日韩视频在线 | 超碰在线人人 | 91免费看片 | www.一级片 | 精品一区二区三区在线观看国产 | 国产精品视频偷伦精品视频 | 国产精品毛片无码 | 黄色精品 | 成人精品 | 看a网站| 亚洲精品久久久久久久不卡四虎 | 久久综合狠狠综合久久 | 亚洲av一级毛片 | 亚洲精品国产电影 | 久久免费视频网 | 国产高清一区二区三区 | 日本不卡一区 | 日韩精品一区二区三区在线播放 | 亚洲成人免费观看 | 欧美黑人体内she精在线观看 | 国产一区二区三区四区 | 狠狠色综合久久婷婷 | 免费国产成人av | 一区视频 | 一区二区视频在线 | 毛片一区二区三区 | 国产精品久久久av | 欧美激情视频一区二区三区免费 | 国产精品日日做人人爱 | 91免费版在线观看 | 国产精品视频www | 欧美精品久久久 | 久久精品国产久精国产 | 亚洲不卡在线观看 | 欧美黑人国产人伦爽爽爽 |