指定した矩形領域に文字列を描画(U)          <TOP>


SetTextColor デバイスコンテキストの文字色を変更
GetClientRect ウィンドウのクライアント領域の座標を取得
TextOut 文字を描画
DrawText 文字列を指定領域に出力
SetBkMode バックグラウンドの塗りつぶしモード設定
BeginPaint 指定されたウィンドウに対して描画の準備
EndPaint
指定されたウィンドウ内の描画の終わりを示す
GetDC 指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放

DT_WORDBREAK(&H10) テキストを複数行で表示。折り返しは自動的に行われる
TRANSPARENT(1) 背景色を設定しない

 

'================================================================
'= 指定した矩形領域に文字列を描画(U)
'=    (BeginPaint.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

Type PAINTSTRUCT
    fhDC        As Long      'デバイスコンテキストを識別
    fErase      As Long      'このメンバが 1 のときは、バックグラウンドを再描画
    rcPaint     As RECT      '更新(再描画)する矩形座標を指定するRECT構造体
    fRestore    As Long      '予約されているメンバ
    fIncUpdate  As Long      '予約されているメンバ
    rgbReserved(31) As Byte  '予約されているメンバ
End Type

#define DT_WORDBREAK &H10               'テキストを複数行で表示。折り返しは自動的に行われる
#define TRANSPARENT 1                   '背景色を設定しない

' デバイスコンテキストの文字色を変更
Declare Function Api_SetTextColor& Lib "gdi32" Alias "SetTextColor" (ByVal hDC&, ByVal crColor&)

' ウィンドウのクライアント領域の座標を取得
Declare Function Api_GetClientRect& Lib "user32" Alias "GetClientRect" (ByVal hWnd&, lpRect As RECT)

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

' 文字列を指定領域に出力
Declare Function Api_DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC&, ByVal lpStr$, ByVal nCount&, lpRect As RECT, ByVal wFormat&)

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

' 指定されたウィンドウに対して描画の準備
Declare Function Api_BeginPaint& Lib "user32" Alias "BeginPaint" (ByVal hWnd&, lpPaint As PAINTSTRUCT)

' 指定されたウィンドウ内の描画の終わりを示す
Declare Function Api_EndPaint& Lib "user32" Alias "EndPaint" (ByVal hWnd&, lpPaint As PAINTSTRUCT)

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

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

'================================================================
'=
'================================================================
Declare Sub MainForm_Resize edecl ()
Sub MainForm_Resize()
    Var hDC As Long
    Var hWnd As Long
    Var rct As RECT
    Var ps As PAINTSTRUCT
    Var txt As String
    Var Ret As Long

    Ret = Api_GetClientRect(GethWnd, rct)
    hDC = Api_GetDC(GethWnd)

    ps.fhDC = hDC
    ps.fErase = 1

    txt = "Left=" & Trim$(Str$(rct.Left)) & " Top=" & Trim$(Str$(rct.Top)) & " Right=" & Trim$(Str$(rct.Right)) & " Bottom=" & Trim$(Str$(rct.Bottom))

    Ret = Api_BeginPaint(GethWnd, ps)

    Ret = Api_SetTextColor(hDC, RGB(255, 0, 0))
    Ret = Api_SetBkMode(hDC, TRANSPARENT)
    Ret = Api_TextOut(hDC, 20, 10, txt, Len(txt))

    rct.Left = 20
    rct.Top = 30
    rct.Right = GetWidth - 20
    rct.Bottom = GetHeight - 20

    txt = "指定されたウィンドウに対して描画の準備をする。" & Chr$(13, 10) & "PAINTSTRUCT 構造体には、ペイント処理に関する情報が設定される。"

    Ret = Api_SetTextColor(hDC, RGB(0, 0, 255))
    Ret = Api_SetBkMode(hDC, TRANSPARENT)
    Ret = Api_DrawText(hDC, txt, Len(txt), rct, DT_WORDBREAK)

    Ret = Api_EndPaint(GethWnd, ps)
    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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