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


CreateFontIndirect 論理フォントを作成
CreateSolidBrush ソリッドカラーで論理ブラシを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
BeginPath hDCで指定されたデバイスコンテキストのパスの作成
EndPath BeginPathで開始したパスの作成を終了
TextOut 文字を描画
StrokePath 選択されているパスを選択されているペンを使用して描画
FillPath 選択されているブラシによってパスの内部を塗りつぶす
DeleteObject 関連付けられていたすべてのシステムリソースを解放
StrokeAndFillPath パスを描画し、その内部を選択されているブラシによって塗りつぶす
GetDCデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
SetBkMode バックグラウンドの塗りつぶしモード設定

 

'================================================================
'= 文字列を描画
'=    (EndPath.bas)
'================================================================
#include "windows.bi"

#define LF_FACESIZE 32

Type LOGFONT
    lfHeight         As Long
    lfWidth          As Long
    lfEscapement     As Long
    lfOrientation    As Long
    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       As String * LF_FACESIZE
End Type

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

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

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

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

' BeginPathで開始したパスの作成を終了
Declare Function Api_EndPath& Lib "gdi32" Alias "EndPath" (ByVal hDC&)

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

' 選択されているパスを選択されているペンを使用して描画する
Declare Function Api_StrokePath& Lib "gdi32" Alias "StrokePath" (ByVal hDC&)

' 選択されているブラシによってパスの内部を塗りつぶす
Declare Function Api_FillPath& Lib "gdi32" Alias "FillPath" (ByVal hDC&)

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

' パスを描画し、その内部を選択されているブラシによって塗りつぶす
Declare Function Api_StrokeAndFillPath& Lib "gdi32" Alias "StrokeAndFillPath" (ByVal hDC&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

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

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

#define TRANSPARENT 1                   '背景色を設定しない

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hDC As Long
    Var sText As String
    Var lf As LOGFONT
    Var rFont As Long
    Var Size As Integer
    Var Ret As Long

    sText = "札幌市"
    hDC = Api_GetDC(GethWnd)

    Size = 48
    lf.lfHeight = Size
    lf.lfCharSet = 128
    lf.lfFaceName = "DF太楷書体" & Chr$(0)
    lf.lfWeight = 700

    rFont = Api_CreateFontIndirect(lf)
    Ret = Api_SelectObject(hDC, rFont)
    Ret = Api_SetBkMode(hDC, TRANSPARENT)
    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 10, 4, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_StrokePath(hDC)
    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 10, 52, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_FillPath(hDC)
    Ret = Api_BeginPath(hDC)
    Ret = Api_TextOut(hDC, 10, 100, sText, Len(sText))
    Ret = Api_EndPath(hDC)

    Ret = Api_StrokeAndFillPath(hDC)
    Ret = Api_SelectObject(hDC, oldBrush)
    Ret = Api_DeleteObject(hBrush)

    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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