2003-07-23 [長年日記]

[Q3] GetTextExtentExPointW (2)

試しに実装してみましたが、それほどパフォーマンスにもヒットしなさそうです。

ひとつ変なのは、GetTextExtentExPointWに長さ0を渡すと正しく処理されるのに、GetTextExtentExPointAに長さ0を渡すとエラーになることでしょうか。

[Q3] GetTextExtentExPointW (3)

うまくいくようになったので、手元の復活させた98SEで試してみたところ全然マトモに動きませんでした。一体どうなっているのやら。。

Microsoft Layer for Unicode

もういっそのこと、Microsoft Layer for Unicodeを使うという手もありますね。なんだかあまりにも実績がなさそうで怖いですけど。

[Q3] GetTextExtentExPointW (4)

調べてみたところ原因がわかりました。ドキュメントによると、ANSIバージョンでの部分文字列の幅の配列は、対応する文字がDBCSの一部だった場合にはその文字全体の幅になることになっています。たとえば幅が6の等幅フォントの場合、「abcあいう」だったら「6 12 18 30 30 42 42 54 54」のようになるはずです。Windows 2000上でGetTextExtentExPointAを呼び出すと確かにこのとおりになります。ところが、Windows 98SE上で呼び出すと、「6 12 18 24 30 36 42 48 54 60」となってしまいます。このせいでUnicode文字列にあわせた部分文字列の幅を計算するところがおかしくなっていました。仕方がないので、一文字ずつIsDBCSLeadByteを呼び出して処理するようにしました。

しかし、MSがこんなバグに気づいていないとも思えないので、バグだけど互換性のために変更できなくなったということでしょうか。いずれにせよドキュメントに書いておいて欲しいものです。

Practical Scheme

Practical Scheme

10年くらい前に初めてLispを見たときには、マクロとかラムダとか一体なんなのかさっぱり理解できなかった覚えがあります。

[tDiary] リンク元が化けまくり

なぜだか分かりませんが、今日のリンク元は化けまくりですね。一つ化けると後が引きづられてしまうのでしょうか?

[tDiary] リンク元が化けまくり (2)

プラグインを消したのが原因だったようです。今は直ってますね。


トップ «前の日記(2003-07-22) 最新 次の日記(2003-07-24)»