Visual Studio 2008 SP1とMFC(feature pack相当)を使ってアプリを書いていたのですが、

↑こんな感じでメニューの文字が小さくなってしまいました(Dominoのメニューフォントサイズが、設定してあるフォントサイズ)。

一応回避方法があったので載せておきます。

CMainFrame::OnCreateの上の方で

LOGFONT lf;
SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0);
CMFCMenuBar::SetMenuFont(&lf);
m_fontGUI.CreateFontIndirect(&lf);

を実行すれば良さそうです。

これどっかに連絡すればsp2で治してくれるのかな?
MSのサポートって有料なのでこういう不具合を見つけてもいまいち報告する気にならないのですが。

—–
(コード修正しました)
なにやらSPI_GETNONCLIENTMETRICSでフォントを取得する方法は
開発環境によってはXPでうまく動作しないようなので、
SPI_GETICONTITLELOGFONTを使う方式に変更しました。
参考:http://d.hatena.ne.jp/NyaRuRu/20080303/p1

UITableViewを使って途中でセルをぬめっと追加したくて、
insertRowsAtIndexPaths:withRowAnimation:
を実行してみたのですが、

NSArray* paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]];
[self.tableView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop];

何故かセパレータが消えちゃいましたorz

いろいろいじっているうちに回避方法を発見。
挿入後に上のセルに対してsetNeedsLayoutを呼んでやればセパレータがうまく描画されるみたいです。

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[cell setNeedsLayout];

うーん、セルの挿入方法とか間違ってるのかなぁ。

テーブルのセルの中央に来るように計算でUISwitchを配置したところ実機で下側が欠けちゃいました。
e38394e382afe38381e383a3-21

どうやら、frame.origin.y が半端な数値(少数)だと起こるもよう。
欠けちゃった場合はその辺りを確認してみてください。

iPhoneの開発言語であるObjective-CはCの上位互換言語なのでC言語で出来ることは一通り出来ます。クラス(NSObjectの派生クラス)にするとメモリ周りのオーバーヘッドが気になる!もしくはクラスを使うまでも無い!という場合は構造体を使うと良いかと思います。

struct Hogehoge {
	int aaaa;
	int bbbb;
};

ただ、C++と違ってCなので構造体を使うときにもいちいち型を「struct Hogehoge」と指定してやらなきゃいけません。

そんなときにはtypedefを使うと楽になります。

typedef struct {
	int aaaa;
	int bbbb;
} Hogehoge;

これで「Hogehoge」だけで構造体の型を利用できるようになります。

この方法はCの頃は結構当たり前のように使っていたのですが、C++にしばらく入り浸っているうちに忘れてしまっていました。
(というか、structつけずに型を使おうとしてコンパイルエラーが出たときは、なんだか懐かしく感じました(^^;;)
またObjective-Cで思い出したので情報として残しておきます。

  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()を使ったやり方もある模様。

記事検索

アーカイブ