CreateFontIndirect와 마찬가지로 이번에는 CreateFont를 사용하여 문자열의 표시시 각도 주어 표시하는 예이다.

다음 결과 이미지이다.



다음은 소스이다

' 논리적 폰트 생성 문자열을 회전하면서 출력한다
Option Explicit

Const FW_NORMAL = 400
Const DEFAULT_CHARSET = 1
Const OUT_DEFAULT_PRECIS = 0
Const CLIP_DEFAULT_PRECIS = 0
Const PROOF_QUALITY = 2
Const DEFAULT_PITCH = 0
Const LOGPIXELSY = 90

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Boolean, ByVal fdwUnderline As Boolean, ByVal fdwStrikeOut As Boolean, ByVal fdwCharSet As Long, ByVal fdwOutputPrecision As Long, ByVal fdwClipPrecision As Long, ByVal fdwQuality As Long, ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long
Private Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Sub Form_Load()
    Dim Angle As Long ' 각도

    With Picture1
        .AutoRedraw = True
        For Angle = 0 To 350 Step 30
            DeleteObject SelectObject(.hdc, CreateMyFont(24, Angle))
            .CurrentX = .ScaleWidth / 2
            .CurrentY = .ScaleHeight / 2
            Picture1.Print "테스트"
        Next Angle
    End With
End Sub

' nSize는 포인트 단위이다.
Private Function CreateMyFont(ByVal nSize As Integer, ByVal nDegrees As Long) As Long ' 논리 폰트를 생성한다.
    CreateMyFont = CreateFont(-MulDiv(nSize, GetDeviceCaps(Me.Hdc, LOGPIXELSY), 72), 0, nDegrees * 10, 0, FW_NORMAL, False, False, False, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, "Times New Roman")
End Function

 예에서서는 논리 폰트를 생성하고, DC에 폰트를 할당하여, 해당 개체의 Print 메소드를 사용해서 결과를 얻었다.

+ Recent posts