フォト
2009年11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
無料ブログはココログ

« 月の呼び名 | トップページ | 【Cocoa】アプリケーション設定の保存と読み込み »

2009年1月30日 (金)

【Cocoa】ウインドウの大きさの取得

 実はアプリケーション設定の保存と読み込みの勉強をしようと思った。保存対象でありがちなのをと思いウインドウサイズなんかいいんだろうとか考えたんだが、ウインドウサイズの取得方法すらわからない。

 そんなわけで今回は、ウインドウサイズの取得方法のまとめ。いろんな記事を参考にはしたのだが、「ズバリこれ!」という記事が見つからず、今回の内容はもしかしたらかなり自己流かもしれない・・・。

 ボタンをクリックすると、そのときのウインドウサイズと位置をログに出力するサンプルアプリを作ってみることにする。

■まずプロジェクト作成

 普通に。Cocoa Applicationで。

■InterfaceBuilderで作業

 MainMenu.xibをダブルクリックしてInterfaceBuilderを起動する。

Sizeget01

 サイズを取得するきっかけが欲しいので、ウインドウ上にボタンを1個配置する。

Sizeget02

 次はコントローラクラスの作成。Libraryの「Cocoa」→「Objects &Controllers」→「Object」を、MainMenu.xib(English)ウインドウにドラッグ&ドロップ。Identityインスペクタで、「Class」のところに「AppController(任意名)」と入力しておく。

Sizeget03

 同じくIdentityインスペクタで、「Class Actions」に「btnClick:(任意名)」を追加。「Class Outlets」に「mainWindow(任意名)」を追加。

Sizeget04

 ここで、AppControllerをファイル化しておく。MainMenu.xib(English)ウインドウでApp Controllerを選択した状態で、メニューバーの「File」→「Write Class Files...」をクリックして、作成したAppControllerをファイルとして保存しておく。

Sizeget05

 続いてアクションとアウトレットの関連付けをしておく。

 ボタンからAppControllerに向かってcontrol+ドラッグ&ドロップ。「btnClick」を選択する。もう一つ、AppControllerから同じウインドウ内の「Window」に向かってcontrol+ドラッグ&ドロップ。「mainWindow」を選択する。

 ここまでできたら、InterfaceBuilderを保存して終了しておく。

■次はXcode側の作業

 まず忘れないうちに、保存したAppControllerの継承元クラスを書いておく。「AppController.h」の「@interface」の行に、「NSObject」を追記する。

【AppController.h】

#import <Cocoa/Cocoa.h>
@interface

AppController : NSObject {
    IBOutlet id mainWindow;

}
- (IBAction)btnClick:(id)sender;
@end

 次にボタンがクリックされたときのコーディング。

 先程アウトレットにNSWindowのオブジェクトを関連付けた。なので、ソースの中では、「mainWindow」としてアクセスすることが可能だ。

 NSWindowにはインスタンスメソッドのなかに「frame」というのがあって、こいつはNSRect型でウインドウのサイズと位置を返してくれる。NSRect型は構造体で、位置を表す構造体とサイズを表す構造体を持っている。

【AppController.m】

#import "AppController.h"

@implementation AppController
- (IBAction)btnClick:(id)sender {
    NSRect rect = [mainWindow frame];
    int x = rect.origin.x;
    int y = rect.origin.y;
    int w = rect.size.width;
    int h = rect.size.height;
    NSLog([NSString stringWithFormat:
        @"x:%d,y:%d,h:%d,w:%d",x,y,h,w]);
}
@end

Sizeget06

 実際に実行してみる。ウインドウのサイズや位置を変えつつボタンをクリックすると、そのたびにx座標、y座標、高さ、幅をログに出力してくれた。

 Macの画面の座標って、左下が(0,0)なんだな。初めて知った。しかも、得られるウインドウの位置情報って、ウインドウの左下隅の座標らしい。Windowsだと左上基準なんだけど。

« 月の呼び名 | トップページ | 【Cocoa】アプリケーション設定の保存と読み込み »

コメント

 関西在住の「やん」と申します。私もつい最近になって、Cocoa&Objective-Cの勉強を始めました。仕事も含め、特にプログラミングの経験のない超初心者ですが、Mac歴は10年以上になります。ネットでいろいろ検索しているうちに、貴プログを発見しました。これからも参考にさせていただきますので、よろしくお願いします。

コメントありがとうございます。
Mac歴10年以上とは恐れ入ります。Macの情報を集めるのに雑誌などを買いあさったのですが、その中にMacの歴史みたいな記事がありました。10年前というと、OS8とかOS9の時代になるんでしょうか。
当方、Macを使い始めて1ヶ月といったところですが、なかなかに気に入っております。10年使い続けてみたいという気になってきました。
こちらこそ、これからもよろしくお願いします。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/95697/27612718

この記事へのトラックバック一覧です: 【Cocoa】ウインドウの大きさの取得:

« 月の呼び名 | トップページ | 【Cocoa】アプリケーション設定の保存と読み込み »