[基本の処理]
デスクトップHDCを取得 : GetDC(NULL)
デスクトップと同じ操作用HDC を作成 : CreateCompatibleDC(NULL)
データセクション用HBITMAP 作成 : CreateDIBSection
上記データセクションを操作用HDC に連結する : SelectObject
[データ処理用]
デスクトップHDCの内容を操作用HDC にコピー : BitBlt
データセクションで作成したVRAM領域から自由にデータを頂く
[終了処理]
すべてのオブジェクトおよび作成した HDC の解放処理
:------------------------------------------------------
以上。が基本的な処理の仕方です。
なぜHSPだと重いのかいうと、それは画像形式の違いでその処理に時間がかかる為です。
デスクトップHDC は基本、色深度 32Bit で作成されています。
HSPウィンドウは基本、色深度 24Bit で作成されています。
32Bit → 24Bit に原色処理をするので処理が著しく遅くなるのが重い原因です。
#uselib "user32.dll"
#cfunc GetDC "GetDC" int
#func ReleaseDC "ReleaseDC" int,int
#uselib "gdi32.dll"
#func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int
///開始処理
*CreateInit
onexit *p_end
DesktopHDC = GetDC(0)
///↑デスクトップが破棄されない限りハンドルは同一の為
///メインループ外で取得しておくこと。
///メインループ
*main
///↓コメントアウト部分は、ダメな方法
///メインループ内で取得と解放を行うとその分重くなるので
///連続で画面取得する場合は、メインループ外で取得しとくこと。
//DesktopHDC = GetDC(0)
await 100
BitBlt hdc,0,0,ginfo(20),ginfo(21),DesktopHDC,0,0,0x00CC0020
///↑BitBlt はデスクトップ 32Bit から 24Bit に変換しているので
///重くなっていると思われる。
redraw 1
///↑redraw 1 まぁHSP ではいつも通りの重たい命令w
//ReleaseDC 0,DesktopHDC
goto *main
///終了処理
*p_end
///↓いらなくなったら必ず解放すること。
ReleaseDC 0,DesktopHDC
end