Dockを除いた最大サイズのウィンドウを表示する

Dock領域を除いてウィンドウを最大化する方法をずっと探していたのですが、Dockのサイズを求めて、画面のサイズからその分引けばよいと考えていたので、Dockの位置やサイズをどうやって求めるのかを検索していたためまったく見つからずにいました。

そんな中、沼田 哲史さんの「Cocoa に関するヌマタメモ」でスクリーンサイズの求め方を見つけ実験してみたところ、NSScreenがDockの位置やサイズを顧慮した最大表示可能領域を返してくれるメソッドを持っていることがわかりました。(沼田さんThanks!)

具体的には以下のようなコードになります。

NSRect rectVisibleAreaExcludeDock = [[theWindow screen] visibleFrame];
[theWindow setFrame:rectVisibleAreaExcludeDock display:YES];

処理の内容は以下のとおりです。

(1) NSWindowのscreenメソッドで最大化したいウィンドウの所属するスクリーンのNSScreenオブジェトを取得する
(2) NSScreenのvisibleFrameメソッドで(1)で求めたスクリーンのサイズからメニューバーとDockのサイズを除いた、表示可能な最大矩形を求める
(3) NSWindowのsetFrame:display:メソッドで最大化したいウィンドウの矩形として(2)で求めた値を設定する

キーとなるのはNSScreenのvisibleFrameメソッドで、これはメニューバーだけではなく、Dockの位置やサイズも考慮して表示可能な最大矩形を返してくれることです。なお、 「Dockを自動的に隠す」に設定されている場合は、メニューバー以外の最大サイズではなく、Dock表示判定のために下に数ドットすき間を開けたサイズを通知します。

灯台下暗しというか、visibleFrameのリファレンスを読み直してみるとDockとの関係がしっかりと書かれており、マニュアルをきちんと読んでなかったのが露呈する結果となりました (^_^;)

サンプルプログラムのダウンロード(44KB)

【作成・確認環境】
MacOS X v10.4.6
Xcode v2.3

一覧へ戻る