文字列を描画(X)          <TOP>


CreateFont 指定の属性を持つ論理フォントを作成
TextOut 文字を描画
SetBkMode バックグラウンドの塗りつぶしモード設定
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
GetDC 指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
 

 

'================================================================
'= 文字列の回転
'=    (CreateFont3.bas)
'================================================================
#include "Windows.bi"

' 指定の属性を持つ論理フォントを作成
Declare Function Api_CreateFont& Lib "gdi32" Alias "CreateFontA" (ByVal Hei&, ByVal Wid&, ByVal Esc&, ByVal Ori&, ByVal Wei&, ByVal Ita&, ByVal Und&, ByVal Stk&, ByVal Chr&, ByVal Out&, ByVal Clp&, ByVal Qua&, ByVal Pit&, ByVal Face$)

' 文字を描画
Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&)

' バックグラウンドの塗りつぶしモード設定
Declare Function Api_SetBkMode& Lib "gdi32" Alias "SetBkMode" (ByVal hDC&, ByVal iBkMode&)

' 指定されたデバイスコンテキストのオブジェクトを選択
Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&)

' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&)

' 指定されたウィンドウのデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

#define CLIP_LH_ANGLES 16               ' Needed for tilted fonts.
#define PI 3.14159625
#define PI_180 (PI / 180#)
#define TRANSPARENT 1                   '背景色を設定しない
#define DEFAULT_CHARSET 1               'デフォルトの文字セット
#define FW_NORMAL 800

Var Shared Timer1 As Object

Timer1.Attach GetDlgItem("Timer1")

Var Shared hDC As Long

'================================================================
'=
'================================================================
Declare Sub DrawRotatedText(txt$, ByVal X!, ByVal Y!, font_name$, ByVal size&, ByVal weight&, ByVal escapement&, ByVal use_italic%, ByVal use_underline%, ByVal use_strikethrough%)
Sub DrawRotatedText(txt$, ByVal X!, ByVal Y!, font_name$, ByVal size&, ByVal weight&, ByVal escapement&, ByVal use_italic%, ByVal use_underline%, ByVal use_strikethrough%)
    Var newfont As Long
    Var oldfont As Long
    Var Ret As Long

    newfont = Api_CreateFont(size&, 0, escapement&, escapement&, weight&, use_italic%, use_underline%, use_strikethrough%, DEFAULT_CHARSET, 0, CLIP_LH_ANGLES, 0, 0, font_name$)
    
    '新規フォント選択
    oldfont = Api_SelectObject(hDC, newfont)
    
    Ret = Api_SetBkMode(hDC, TRANSPARENT)
    Ret = Api_TextOut(hDC, X, Y, txt$, Len(txt$))

    '元のフォントに戻す
    newfont = Api_SelectObject(hDC, oldfont)
    
    'リソース解放
    Ret = Api_DeleteObject(newfont)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    hDC = Api_GetDC(GethWnd)

    Timer1.SetInterval 5
    Timer1.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Static angle As Long        '角度

    Cls
    
    DrawRotatedText "札幌", 115, 100, "AR丸ゴシック体E", 50, FW_NORMAL, angle * 10, False, False, False

    angle = angle + 10
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Var Ret As Long

    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End