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


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


LOGFONT構造体を使用せず、CreateFontでフォント名を指定しています。

参照

文字列を描画(W)

 

'================================================================
'= 文字列を描画([)
'=    (StrokePath2.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_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&)

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

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

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

' 選択されているパスを選択されているペンを使用して描画する
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&)

#define TRANSPARENT 1                   '背景色を設定しない
#define FW_BOLD 700                     'LOGFONT(lfWeight)
#define vbWhite &HFFFFFF                '白のカラーコード

Var Shared Button1 As Object

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var txt As String
    Var hDC As Long
    Var Size As Long
    Var rFont As Long
    Var hBrush As Long
    Var oldBrush As Long
    Var Ret As Long

    txt = "札幌市"
    Size = 50

    hDC = Api_GetDC(GethWnd)

    rFont = Api_CreateFont(Size, 0, 0, 0, 700, 0, 0, 0, 1, 0, 0, 0, 0, "DCGクリスタルW5")
                                                                '論理フォントを作成
    Ret = Api_SelectObject(hDC, rFont)                          '指定されたデバイスコンテキストのオブジェクトを選択

    hBrush = Api_CreateSolidBrush(RGB(255, 255, 0))             'ブラシを作成
    oldBrush = Api_SelectObject(hDC, hBrush)                    'オブジェクトを選択
    Ret = Api_SetBkMode(hDC, TRANSPARENT)                       '背景の塗り潰しモードを設定

    Ret = Api_BeginPath(hDC)                                    'パスブラケットオープン
    Ret = Api_TextOut(hDC, 10, 0, txt, Len(txt))                'テキスト描画
    Ret = Api_EndPath(hDC)                                      'パスブラケットクローズ
    Ret = Api_StrokePath(hDC)                                   '輪郭を描画

    Ret = Api_BeginPath(hDC)                                    '次のパスブラケットオープン
    Ret = Api_TextOut(hDC, 10, Size, txt, Len(txt))             'テキスト描画
    Ret = Api_EndPath(hDC)                                      'パスブラケットクローズ
    Ret = Api_FillPath(hDC)                                     '指定のブラシで塗りつぶす

    hBrush = Api_CreateSolidBrush(RGB(255, 0, 255))             'ブラシを作成
    oldBrush = Api_SelectObject(hDC, hBrush)                    'オブジェクトを選択

    Ret = Api_BeginPath(hDC)                                    '次のパスブラケットオープン
    Ret = Api_TextOut(hDC, 10, Size * 2, txt, Len(txt))         'テキスト描画
    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