CreateFontIndirect で作成したFontが稀に縦書になる
- 題名: CreateFontIndirect で作成したFontが稀に縦書になる
- 著者: DEG
- 日時: 2007/10/30 18:57:04
- ID: 20829
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: CreateFontIndirect で作成したFontが稀に縦書になる
- 著者: じゅで
- 日時: 2007/10/31 12:02:59
- ID: 20835
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: CreateFontIndirect で作成したFontが稀に縦書になる
- 著者: DEG
- 日時: 2007/10/31 19:25:08
- ID: 20838
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.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を検索するという記事を
見た覚えがありますが、常に再現しないのはそのためかとも思います
何か対策がありましたら、お教えくださ