Win32: Unicode 版 GDI 関数は、Font Linking に対応済み

英語フォントを指定して TextOutA や DrawTextA で文字列描画すると、日本語の文字は化ける。しかし、TextOutW や DrawTextW を使用すると、Font Linking が有効となり、設定がされていれば日本語の文字も適切なフォントで表示してくれる。

VB の場合

VB で画面に文字列を表示したい場合は、普通は Label を使う。が、Label は Font Linking に対応していないので、「日本語文字を表示する可能性があるが、英字は Verdana で表示したい」といった場合には、自前で描画する必要がある。
TextOutW や DrawTextW を Declare して使えばいい。Unicode 版なので、ANSI 版の関数を呼び出すときと方法が違う。これらの関数に限った話じゃないが、復習のためここにメモ。

  • 文字列引数を宣言するとき、ByVal の String じゃなくて ByRef の Byte とする。
  • 文字列値を一旦 Byte 配列に入れる。このとき末尾に vbNullChar を付けてやる必要がある。
  • 関数を呼び出す際、上記の Byte 配列の先頭要素を参照渡しする。

関連リソース

Font Linking について知るには……

Windows 2000/XPのFont Link機能 (Font Linking)
http://blue.ribbon.to/~akene/fontlink.htm

自前で実装するには……

MSDN Library - How to Use Font Linking
http://msdn.microsoft.com/workshop/misc/mlang/tutorials/fontlinking.asp