LOGFONT構造体          <TOP>


LOGFONT構造体に値を入れ変化を確認します。

CreateFontIndirect 論理フォントを作成

SelectObject 指定されたデバイスコンテキストのオブジェクトを選択

CreateSolidBrush ソリッドカラーで論理ブラシを作成

BeginPath 指定されたデバイスコンテキストのパスを作成

TextOut 文字を描画

EndPath パスブラケットのクローズ

StrokeAndFillPath パスの輪郭を描画

FillPath パスを塗り潰す

DeleteObject システムリソースの解放

GetDC デバイスコンテキストのハンドルを取得

ReleaseDC デバイスコンテキストの解放

 

 

'================================================================
'= LOGFONT構造体
'=    (Paths.bas)
'================================================================
#include "Windows.bi"

#define LF_FACESIZE 32

Type LOGFONT
    lfHeight            As Long    '文字セルまたは文字の高さ
    lfWidth             As Long    '平均文字幅
    lfEscapement        As Long    '文字送りの方向とX軸との角度
    lfOrientation       As Long    'ベースラインとX軸との角度
    lfWeight            As Long    'フォントの太さ
    lfItalic            As Byte    'イタリック体指定
    lfUnderline         As Byte    '下線付き指定
    lfStrikeOut         As Byte    '打ち消し線付き指定
    lfCharSet           As Byte    'キャラクタセット
    lfOutPrecision      As Byte    '出力精度
    lfClipPrecision     As Byte    'クリッピングの精度
    lfQuality           As Byte    '出力品質
    lfPitchAndFamily    As Byte    'ピッチとファミリ
    lfFaceName(LF_FACESIZE) As Byte'フォント名
End Type

' 論理フォントを作成
Declare Function Api_CreateFontIndirect& Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT)

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

' ソリッドカラーで論理ブラシを作成
Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&)

' 指定されたデバイスコンテキストのパスの作成
Declare Function Api_BeginPath& Lib "gdi32" Alias "BeginPath" (ByVal hDC&)

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

' パスブラケットのクローズ
Declare Function Api_EndPath& Lib "gdi32" Alias "EndPath" (ByVal hDC&)

' パスの輪郭を描画
Declare Function Api_StrokePath& Lib "gdi32" Alias "StrokePath" (ByVal hDC&)

' パスの描画と塗りつぶし
Declare Function Api_StrokeAndFillPath& Lib "gdi32" Alias "StrokeAndFillPath" (ByVal hDC&)

' パスを塗りつぶす
Declare Function Api_FillPath& Lib "gdi32" Alias "FillPath" (ByVal hDC&)

' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる
Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得。その後、GDI 関数を使って、返されたデバイスコンテキスト内で描画を行える
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

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

#define FW_DONTCARE 0                   'LOGFONT(lfWeight)
#define FW_BOLD 700                     'LOGFONT(lfWeight)

Var Shared Picture1 As Object
Var Shared Text(1)As Object
Var Shared Edit(1) As Object
Var Shared Check(3) As Object
Var Shared Button1 As Object

Picture1.Attach GetDlgItem("Picture1")
For i = 0 To 3
    If i < 2 Then
        Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
        Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14
    End If
    Check(i).Attach GetDlgItem("Check" & Trim$(Str$(i + 1)))
    CHeck(i).SetFontSize 14
Next
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    ShowWindow -1
    Edit(0).SetWindowText "50"
    Edit(1).SetWindowText "0"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var LF As LOGFONT
    Var rFont As Long
    Var hBrush As Long
    Var oldBrush As Long
    Var crColor As Long
    Var hDC As Long
    Var sText As String
    Var size As Integer
    Var angle As Integer
    Var Ret As Long

    hDC = Api_GetDC(Picture1.GethWnd)
    Picture1.Cls

    sText = "北海道札幌市"
    size = Val(EDit(0).GetWindowText)
    angle = Val(EDit(1).GetWindowText)
    crColor = rgb(255, 255, 0)

    LF.lfCharSet = 128                                          '日本語(SHIFTJIS_CHARSET)
    LF.lfEscapement = angle * 10                                '角度設定
    LF.lfHeight = size                                          '文字高さ設定
    If Check(0).GetCHeck = 1 Then LF.lfWeight = FW_BOLD Else LF.lfWeight = FW_DONTCARE
    LF.lfItalic = Check(1).GetCheck                             'イタリック
    LF.lfUnderline = Check(2).GetCheck                          '下線
    LF.lfStrikeOut = Check(3).GetCheck                          '打ち消し線
    
    rFont = Api_CreateFontIndirect(LF)                          '論理フォントの作成

    Ret = Api_SelectObject(hDC, rFont)                          '指定されたデバイスコンテキストのオブジェクトを選択
    Ret = Api_TextOut(hDC, 0, 0, sText, Len(sText))             'フォームの指定位置に指定角度・大きさで文字列を描画

    hBrush = Api_CreateSolidBrush(crColor)                      '塗り潰し色
    oldBrush = Api_SelectObject(hDC, hBrush)                    '現在の塗り潰し色を設定

    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 0, 0, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_StrokePath(hDC)                                   'パスの輪郭を描画
    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 0, LF.lfHeight + 1, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_FillPath(hDC)                                     'パスを塗りつぶす
    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 0, LF.lfHeight * 2 + 1, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_StrokeAndFillPath(hDC)                            'パスの描画と塗りつぶし
    Ret = Api_SelectObject(hDC, oldBrush)                       'ブラシを元に戻す

    Ret = Api_DeleteObject(hBrush)
    Ret = Api_ReleaseDC(Picture1.GethWnd, hDC)
End Sub

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