DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CreateFontIndirect で作成したFontが稀に縦書になる

環境/言語:[win2000 vb.net2003]
分類:[.NET]

稀にですが、
以下のようにCreateFontIndirect で作成したFont(MSゴシック)の
全角文字のみが、90度回転し、縦書で表示されてしまいます
ex."ABC一" --> "ABC|" (漢字の1が、横棒ではなく縦棒になる)

Public Declare Function CreateFontIndirect Lib "gdi32" _
Alias "CreateFontIndirectA" (ByRef lpLogFont As LOGFONT) As IntPtr
<StructLayout(LayoutKind.Sequential)> Public Structure LOGFONT
Public lfHeight As Int32
...
<VBFixedString(LF_FACESIZE)> Public lfFaceName As String
End Structure

Dim g As Graphics = Graphics.FromHwnd(Me.Handle)
Dim hDC As IntPtr = g.GetHdc()
Dim hFont As IntPtr = CreateFontIndirect(mLf)
Dim hOldFont As IntPtr = SelectObject(hDC, hFont)

ここでTextout等で文字描画

SelectObject(hDC, hOldFont)
DeleteObject(hFont)
hFont = IntPtr.Zero
g.ReleaseHdc(hDC)
g.Dispose()

LOGFONTには、
mLf.lfFaceName = Me.Font.FontFamily.Name & ControlChars.NullChar
mLf.lfWeight = FW_NORMAL
mLf.lfHeight = Me.FontHeight
mLf.lfCharSet = Me.Font.GdiCharSet
mLf.lfPitchAndFamily = FIXED_PITCH

をセットしてあります(MeはFormで、MSゴシック)

CreateFontIndirect は条件の近いFontを検索するという記事を
見た覚えがありますが、常に再現しないのはそのためかとも思います

何か対策がありましたら、お教えくださ
■No20829に返信(DEGさんの記事)
ちらちらと昔いくつかフォントの回転に不具合があったのを思い出しながら
検索をしてみました。

もしかしたら、OSとドライバなどを疑ってみるのも良いかもしれません。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070021.txt

違ってたらすいません。

特定のマシンというのが、OS、もしくは、同一マシンでドライバのバージョン違いなのかがあると、良いかもしれません。
■No20835に返信(じゅでさんの記事)
> もしかしたら、OSとドライバなどを疑ってみるのも良いかもしれません。

情報、有難うございます。
とりあえずドライバー更新しました、
数十回試した範囲では問題は発生しませんでしたが、
もともと常に再現するわけではないので、
しばらく様子を見てみます

DOBON.NET | プログラミング道 | プログラミング掲示板