タイルペイント(T)          <TOP>


BitBlt コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー

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

 

 

'================================================================
'= タイルペイント
'=    (TilePaint.bas)
'================================================================
#include "Windows.bi"

' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー
Declare Function Api_BitBlt& Lib "gdi32" Alias "BitBlt" (ByVal hDestDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal dwRop&)

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

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

#define SRCCOPY &HCC0020                'そのまま転送

Var Shared Bitmap As Object
Var Shared Picture1 As Object

Picture1.Attach GetDlgItem("Picture1")
BitmapObject Bitmap

Var Shared hDC As Long
Var Shared hDC2 As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Bitmap.LoadFile "bike1.Bmp"
    Picture1.StretchBitmap Bitmap, 0, 0, Picture1.GetWidth, Picture1.GetHeight
    Bitmap.DeleteObject

    hDC = Api_GetDC(GethWnd)
    hDC2 = Api_GetDC(Picture1.GethWnd)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Resize edecl ()
Sub MainForm_Resize()
    Var y As Long
    Var x As Long
    Var Ret As Long

    Cls

    For y = 0 To GetHeight Step Picture1.GetHeight
        For x = 0 To GetWidth Step Picture1.GetWidth
            Ret = Api_BitBlt(hDC, x, y, Picture1.GetWidth, Picture1.GetHeight, hDC2, 0, 0, SRCCOPY)
        Next
    Next
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Ret = Api_ReleaseDC(GethWnd, hDC)
    Ret = Api_ReleaseDC(Picture1.GethWnd, hDC2)
End Sub

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