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-
NSFontManager

Application Kit - NSFontManager
フォントメニューを動的に追加する
Keywords: fontMenu

アプリケーションにフォントメニューを追加してみよう!Interface Builder で設定してもいいけど、ここでは動的に追加してみる。まずフォントメニューを取得する。それには fontMenu を使う。

Application Kit/NSFontManger.h
- (NSMenu *)fontMenu:(BOOL)create;

次にアプリケーションのメインメニューを取得して、メニューを追加するんだ。

(sample)
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    NSMenu*	mainMenu;
    NSMenu* menu;
    NSMenuItem*	menuItem;
    
    mainMenu = [NSApp mainMenu];
    menuItem = [[NSMenuItem alloc] 
            initWithTitle:@"Font" action:nil keyEquivalent:@""];
    [menuItem setSubmenu:
            [[NSFontManager sharedFontManager] fontMenu:YES]];
    [mainMenu addItem:menuItem];
    [menuItem release];
}

こんなところかな。この例では一番最後に追加しているけど、もちろん、自分の好きなところに入れてもらって、問題ないぜ。


Application Kit - NSFontManager
フォントパネルを表示する
Keywords: fontPanel, orderFrontFontPanel

Cocoa では、標準でフォントパネルがついてくるんだ。そいつを表示させるにはいくつか方法がある。まず、fontPanel: メソッドを使う方法。

Application Kit/NSFontManger.h
- (NSFontPanel *)fontPanel:(BOOL)createFlag;

これを使えば、NSFontPanel のインスタンスが得られる。createFlag には、インスタンスを、必要なら、作りなおすかどうかを指定するんだ。

(sample)
- (void)showFontPanel
{
    NSFontPanel* fontPanel;
    fontPanel = [[NSFontManager sharedFontManger] fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:self];
}

作った後は、makeKeyAndOrderFront: で、前に持ってくるんだ。

別の方法は、orderFrontFontPanel: を使う方法。

Application Kit/NSFontManger.h
- (void)orderFrontFontPanel:(id)sender;

これを使えば、上のサンプルで示したことを一発でやってくれる。また、フォントメニューを使ったときも、メニューのアクションとして、これが呼び出されるんだ。

(sample)
- (void)showFontPanel1
{
    NSFontPanel* fontPanel;
    fontPanel = [[NSFontManager sharedFontManger] 
            orderFrontFontPanel:self];
}

どちらを使うかは、ケース・バイ・ケースで。


Application Kit - NSFontManager
フォントパネルからのフォント変更を受け取る
Keywords: fontMenu

フォントパネルを表示させたら、とうぜんフォントを変更するでしょ。そのイベントを受け取らなくてはいけない。どうするのかというと、フォントが変更されたとき、NSFontManager は changeFont: アクションを Responder Chain に投げるんだ。そいつを捕まえてやればいい。

(sample)
- (void)changeFont:(id)fontManager
{
    NSFont*    oldFont = [NSFont fontWithName:@"Times" size:14];
    NSFont*    newFont;
    newFont = [fontManager convertFont:oldFont];
}

changeFont: の引き数に指定される id は NSFontManager なんだ。そして、そいつの convertFont: を呼んでやると、変更されたフォントを取得することができる。convertFont: には、古いフォントを指定してやる必要があるんだ。ここでは、いちいちダミーを作ってやっている。本来ならば、前に取得したフォントを保持しておいて、それを指定してやればいいんだ。



[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