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


BitBlt コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー
LoadImage 画像ファイルの読み込み
CreateCompatibleDC デバイスコンテキストを作成
DeleteDC 指定されたデバイスコンテキストを削除
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
GetObject オブジェクト取得
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
 

 

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

Type BITMAP
    bmType       As Long
    bmWidth      As Long
    bmHeight     As Long
    bmWidthBytes As Long
    bmPlanes     As Integer
    bmBitsPixel  As Integer
    bmBits       As Long
End Type

#define IMAGE_BITMAP 0                  'ビットマップ
#define LR_LOADFROMFILE &H10            '外部ファイルからロードする
#define SRCCOPY &HCC0020                'そのまま転送

' 画像ファイルの読み込み
Declare Function Api_LoadImage& Lib "user32" Alias "LoadImageA" (ByVal hInst&, ByVal lpszName$, ByVal uType&, ByVal cxDesired&, ByVal cyDesired&, ByVal fuLoad&)

' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー
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_CreateCompatibleDC& Lib "gdi32" Alias "CreateCompatibleDC" (ByVal hDC&)

' 指定されたデバイスコンテキストを削除
Declare Function Api_DeleteDC& Lib "gdi32" Alias "DeleteDC" (ByVal hDC&)

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

' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&)

' オブジェクト取得
Declare Function Api_GetObject& Lib "gdi32" Alias "GetObjectA" (ByVal hObject&, ByVal nCount&, lpObject As Any)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
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               'MainFormのデバイスコンテキスト
    Var Success As Long           'API戻り値
    Var bmp As BITMAP             'BITMAP構造体
    Var srcDC As Long             'ソースのデバイスコンテキスト
    Var srcBmp As Long            'ソースビットマップ
    Var hSrcBmp As Long           'ソースビットマップのハンドル
    Var y As Long
    Var x As Long
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)

    srcBmp = Api_LoadImage(0, "flower.bmp", IMAGEBITMAP, 0, 0, LR_LOADFROMFILE)
    Ret = Api_GetObject(srcBmp, Len(bmp), bmp)
    srcDC = Api_CreateCompatibleDC(hDC)
    hSrcBmp = Api_SelectObject(srcDC, srcBmp)

    For y = 0 To GetHeight Step bmp.bmHeight
        For x = 0 To GetWidth Step bmp.bmWidth
            Ret = Api_BitBlt(hDC, x, y, bmp.bmWidth, bmp.bmHeight, srcDC, 0, 0, &HCC0020)
        Next x
    Next y

    Ret = Api_DeleteObject(hSrcBmp)
    Ret = Api_DeleteDC(srcDC)
    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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