Geometry 関数
NSBundle
NSDictionary
NSFileManager
NSMutableAttributedString
NSNumber
NSScanner
NSString
NSTimer
Graphic 関数
NSApplication
NSBezierPath
NSCell
NSColor
NSCursor
NSCustomImageRep
NSDocument
NSDocumentController
NSDragging
NSEvent
-イベントの起きた場所を調べる
-クリックの回数を調べる
-キーイベントを受け取る
NSFontManager
NSGraphicsContext
NSImage
NSMenu
NSOutlineView
NSPanel
NSPopUpButton
NSResponder
NSScrollView
NSString 追加
NSTableColumn
NSTableView
NSTextStorage
NSTextView
NSToolbar
NSView
NSWindow
NSWorkspace
その他
.nib ウィンドウ
Views パレット
クラス
インスタンス変数
メソッド
CFXML
Carbon Event
Carbon Graphics
Cocoa で日本語
メソッド
その他

- Application Kit-
NSEvent

Application Kit - NSEvent
イベントの起きた場所を調べる
Keywords: locationInWindow

イベントには場所情報を伴うものもある。たとえば、マウスイベントとかね。イベントがウィンドウの中のどこで起きたのか?を、調べるものが locationInWindow メソッドだ。

Application Kit/NSEvent.h
- (NSPoint)locationInWindow;

これを使えば、イベントからウィンドウのどの場所で起きたか?という情報を取り出すことができる。

これとは別に、画面の中でのマウスの位置をを知りたいときは、mouseLocation クラスメソッドを使う。

Application Kit/NSEvent.h
+ (NSPoint)mouseLocation;

このメソッドは現在のマウスの位置を返す。

(sample)
- (void)mouseDown:(NSEvent*)event
{
    NSPoint point;
    point = [event locationInWindow];
    printf("Mouse location is %s in Window¥n", 
        [NSStringFromPoint(point) cString]);

    point = [self convertPoint:point fromView:nil];
    printf("Mouse lcoation is %s in View¥n", 
        [NSStringFromPoint(point) cString]);

    point = [NSEvent mouseLocation];
    printf("Mouse location is %s in Screen¥n", 
        [NSStringFromPoint(point) cString]);
}

上のサンプルでは、イベントが起きたときのマウスの位置と、現在のマウスの位置を表示している。それぞれ、ウィンドウでの座標、ビューでの座標、スクリーンでの座標だ。ビューでの座標は、convertPoint: を使って取得しているよ。


Application Kit - NSEvent
クリックの回数を調べる
Keywords: clickCount

イベントがマウスイベントだった場合は、クリックの回数を調べることができるんだ。これを使えば、シングルクリックなのか、ダブルクリックなのか知ることができる。clickCount を使う。

Application Kit/NSEvent.h
- (int)clikcCount;

返り値にクリックの回数が入るんだ。マウスイベント意外にこのメソッドを使うと、例外が発生するから、注意。


Application Kit - NSEvent
キーイベントを受け取る
Keywords: keyDown, keyUp

キーボードのキーを押されたときに発行されるのがキーイベント。これに関連するメソッドは NSResponder の、keyDownkeyUp:flagsChanged: だ。

Application Kit/NSResponder.h
- (void)keyDown:(NSEvent *)theEvent;
- (void)keyUp:(NSEvent *)theEvent;
- (void)flagsChanged:(NSEvent *)theEvent;

キーが押されたときにこれらのメソッドが呼び出されるんだけど、あるオブジェクトがこれらのイベントを受け取るには、次の条件が必要なんだ。

  • NSResponder のサブクラスである
  • ファーストレスポンダである

キーイベントを受け取るためには、ファーストレスポンダでなくてはいけない。マウスでクリックしてやるか、NSWindow の makeFirstResponder: メソッドを使ってファーストレスポンダにしてやろう。

ではサンプル。このサンプルは .nib で KeyResponder っていうインスタンスを作って、そいつにキーイベントを渡す様子を見せているんだ。実行すると Start と Stop というボタンが出てきて、それを押すと KeyResponder のインスタンスをファーストレスポンダにしたり、ファーストレスポンダから外したりする。

KeyEvent/AppController.m
- (IBAction)start:(id)sender
{
    // keyResponder をファーストレスポンダにする
    [_window makeFirstResponder:_keyResponder];
}

- (IBAction)stop:(id)sender
{
    // ファーストレスポンダを nil にする
    [_window makeFirstResponder:nil];
}

ファーストレスポンダになる KeyResponder では、keyDownkeyUp:flagsChanged: のメソッドをオーバーライドしている。ここではとりあえず NSLog() でメッセージを吐かせている。これでキーイベントが受け取れるぜ。

■サンプルダウンロード:
KeyEvent.tar.gz



[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp