1. プロジェクトのResourcesを右クリック→追加→新規ファイルを選ぶ
  2. Mac OS Xテンプレートの中からOther→Strings Fileを選ぶ
  3. ファイル名は「Localizable.strings」にする
  4. プロジェクトに追加された「Localizable.strings」の情報を表示し、「ファイルをローカライズ可能にする」ボタンをクリック
  5. 最初はEnglishしか無いので、「ローカリゼーションを追加」ボタンを押してJapaneseを追加する
  6. プロジェクトの「Localizable.strings」ファイルの左に三角マークが付くのでクリックして展開し、「Japanese」の情報を表示する
  7. 「一般」タブをクリックし、エンコーディングを「Unicode (UTF-16)」に設定する【重要】

これで準備は整いました。

次に、
「Localizable.strings」の「Japanese」をxcodeで開き、

"New" = "新規作成";
"Open" = "開く";
・・・

と言うように”キー”=”文字列”;という組み合わせで文字列を書き込みます。

あとは、

[[NSBundle mainBundle] localizedStringForKey:@"New" value:@"New" table:nil]

などと呼び出せば、言語環境に合わせて文字列データを引っ張ってきてくれます。

第一引数がキー。
第二引数はキーが見つからなかった場合のデフォルト文字列。
第三引数は文字列ファイル名(nilでLocalizableになる)。

なので、第二引数に英語の文字列を書いておき、「Localizable.strings」の「Japanese」やその他の言語にローカライズした文字データを書いておけばよさそう(英語のstringsファイルは空っぽのまま)。

ネットを徘徊するとNSLocalizedString()を使ったやり方もある模様。

DirectSoundを使うまでもない音の再生は
sndPlaySound API
http://msdn.microsoft.com/ja-jp/library/cc428790.aspx
もしくは
PlaySound API
http://msdn.microsoft.com/ja-jp/library/cc428768.aspx
を使う。

たしか複数再生が出来ないといった制限があったはずですが、ちょっとした効果音を鳴らすにはこれで足りるかと思います。

メモ

NSString* path = [[NSBundle mainBundle] pathForResource:@"ファイル名" ofType:@"拡張子"];
フルスクリーン化でまたもや問題発生。

PocketPC 2003からOSの機能として画面の縦長・横長を切り替えられる(回転する)ようになっているわけですが、縦長向けにデザインしたダイアログを横長画面で表示したときに、ダイアログ下部のコントロールが見えなくなることを防ぐために、OSが場合によって縦スクロールバーを出すみたいなんです。

http://msdn.microsoft.com/ja-jp/library/cc825750.aspx
レガシ アプリケーションの動作

そうした機能自体は良いと思うのですが、これがフルスクリーンアプリで横画面モード時、画面の一番下の方に何かウィンドウがあると(画面からはみだしていないのにも関わらず)縦スクロールバーが出てしまうという副作用があるのです(OSはアプリがフルスクリーンか否かに関係なく、特定の座標以下にウィンドウがあったらスクロールバーを出す仕組みになっているぽい)。

最初の内はスクロールバーが表示されたのを感知してShowScrollBar(SB_BOTH, FALSE);を呼び出していたのですが、一瞬スクロールバーが見えるので美しくないんです。

なんとかならないかといろいろ実験しているうちに、ダイアログにタブコントロールを置いておくと、縦スクロールバーが何故か出ないことを偶然にも発見(^ー^;;

非表示・無効状態でも大丈夫みたいなので、とりあえずこれで回避していますorz

GDI+はAquaMakerでも使っているWindows標準(拡張?)のグラフィックス機能でして、最近趣味でも仕事でもちょくちょく使ってみたりしているのですが、メリットが非常に多い反面、デメリットも結構あるので、その辺の情報を載せてみたいと思います。

描画速度が遅い

これが一番ネックで、実際に採用されにくくなっている気がします。
DrawImageで画像を転送するだけでも遅いので残念です。
オフスクリーン同士で拡大縮小回転などを一切行わない場合はLockBitsだかでメモリをロックしてmemcpyなどでメモリをコピーした方が速いこともあります。

画像の拡大縮小の描画の際、補間モードを指定出来るのですが、速度の速いバイリニア方式(InterpolationModeBilinear)を使った際、初回縮小描画時は高品質・低速な描画で、いったん拡大描画や回転描画を行うと低品質・高速な描画が行われるようになったりして安定しません。
(良い回避策はなさそうな予感)

 

メタファイル(WMF,EMF)の描画でアンチエイリアスが掛からない

GDI+の線描画機能などはアンチエイリアスを掛けられるのですが、その設定をしていてもメタファイル描画の際にはアンチエイリアスが掛かりません。
他の描画は全て綺麗なのに、メタファイルだけはジャギーが目立つので非常に残念な結果になります。

ただ、これは一応対策がありまして、メタファイルを解析してGDI+の描画機能を使ってアンチエイリアスオンの状態で描画し、それをEMF+形式(?)に記録(保存)すれば、今度はそのEMF+形式を読み込んで描画したときには、アンチエイリアスオンの状態で描画が行われます。
(一度コンバータのようなものを作ってしまえばOKです)

GDI+にはメタファイルに記録されている命令を列挙する関数がありますので、その辺を使えばなんとか実現できます。

記事検索

アーカイブ