デバイスコンテキストの状態保存と復元(U)          <TOP>


SaveDC 指定のデバイスコンテキストの現在の状態を保存
RestoreDC SaveDC関数で保存したデバイスコンテキストを復元
SetTextColor デバイスコンテキストの文字色を変更
SetBkMode バックグラウンドの塗りつぶしモード設定
TextOut 文字を描画
GetDC 指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放

 

'================================================================
'= デバイスコンテキストの状態保存と復元(U)
'=    (SaveDC.bas)
'================================================================
#include "Windows.bi"

' 指定のデバイスコンテキストの現在の状態を保存
Declare Function Api_SaveDC& Lib "gdi32" Alias "SaveDC" (ByVal hDC&)

' SaveDC関数で保存したデバイスコンテキストを復元
Declare Function Api_RestoreDC& Lib "gdi32" Alias "RestoreDC" (ByVal hDC&, ByVal nSaveDC&)

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

' バックグラウンドの塗りつぶしモード設定
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&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
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                   '背景色を設定しない

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 txt As String
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)

    Ret = Api_SetBkMode(hDC, TRANSPARENT)

    txt = "DCに赤を設定"
    Ret = Api_SetTextColor(hDC, RGB(255, 0, 0))
    Ret = Api_TextOut(hDC, 10, 5, txt, Len(txt))
    Ret = Api_SaveDC(hDC)                        'DCに赤を設定したことを保存

    txt = "DCに緑を設定"
    Ret = Api_SetTextColor(hDC, RGB(0, 255, 0))
    Ret = Api_TextOut(hDC, 10, 21, txt, Len(txt))
    Ret = Api_SaveDC(hDC)                        'DCに緑を設定したことを保存

    txt = "DCに青を設定"
    Ret = Api_SetTextColor(hDC, RGB(0, 0, 255))
    Ret = Api_TextOut(hDC, 10, 37, txt, Len(txt))

    txt = "直前に保存したDCを復元"
    Ret = Api_RestoreDC(hDC, -1)
    Ret = Api_TextOut(hDC, 10, 53, txt, Len(txt))

    txt = "その前に保存したDCを復元"
    Ret = Api_RestoreDC(hDC, -1)
    Ret = Api_TextOut(hDC, 10, 69, txt, Len(txt))
    
    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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