またまた MFC。
とある設定画面の一覧表示をリストボックスで作っているんだけど、ヘッダにスタティックコントロールを貼り付けている。
リストボックスの中身は CListBox::SetTabStops でタブ位置を設定して、タブで区切って表示している。
こうするとリストヴューの詳細表示のように使えるのだ。
ところが、多言語対応をしてダイアログのフォントを変えたらタブ位置とスタティックコントロールの位置が揃わなくなってしまった。
フォントによって横幅がちがうので、当たり前なのだが…困った。
どうせ日本語・英語・中国語の 3 種類だから、自分で測ってタブ位置を調整しようかとも思ったが、やっぱりプログラムでやらせよう。
この CListBox の SetTabStops メソッドは、位置の指定がひねくれている。
ピクセル単位でも文字単位でもなく、リファレンスによると「ダイアログ単位で指定」と書いてある。
「ダイアログ単位」とは、「ダイアログベース単位」の 1/4 らしい。
ええい、ややこしい。
「ダイアログベース単位」は GetDialogBaseUnits でピクセル数を取得することができるんだけど、それを使ってもうまくいかなかった。
どうも、「ダイアログベース単位」はシステムで決まっているダイアログのフォントをベースにしているらしく、フォントがちがうとずれてしまうようだ。
しかたがないので、それぞれのフォントの平均幅を取得して、計算に使うように変えたら OK だった。
こんなのリファレンスだけじゃわからんよ…。
ようやく実装が終わったので、テスト。
ところが、巨大なバグを見つけてしまって、残業突入。
敵は手強い…。
悩んでいたら、モジャ子さんから連絡が。
どうも仕事の話らしい。ほう。
けっきょくバグは解決したものの、23 時を超えてしまった。
疲れた…。