リンク先のスクリプトを、分かりやすいようにモジュール化してみました。(ついでに画像ロードモードも付けてみました)
このモジュールは、参考にするなり、使用するなり自由にして大丈夫です。
#module picload_by_win32api
#uselib "user32.dll"
#func LoadImage "LoadImageA" sptr,sptr,sptr,sptr,sptr,sptr
#uselib "gdi32.dll"
#func CreateCompatibleDC "CreateCompatibleDC" sptr
#func SelectObject "SelectObject" sptr,sptr
#func GetObject "GetObjectA" sptr,sptr,sptr
#func BitBlt "BitBlt" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func DeleteDC "DeleteDC" sptr
#func DeleteObject "DeleteObject" sptr
#define LR_LOADFROMFILE 0x10
#define IMAGE_BITMAP 0
#define SRCCOPY 0xCC0020
#deffunc PicLoadByWin32Api str filename, int loadmode
hImage = LoadImage(hinstance, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) // bmpを読み込み
memoryDc = CreateCompatibleDC(hdc) // メモリDC作成
SelectObject memoryDc, hImage // メモリDCにbmp転送
// bmpのサイズ取得
bufferSize = GetObject(hImage,0,0)
dim BITMAP, bufferSize/4
GetObject hImage, bufferSize, varptr(BITMAP)
// メモリDCからコピー
if loadmode == 0 { // ウィンドウを初期化してロード
screen ginfo_sel, BITMAP(1), BITMAP(2)
BitBlt hdc, 0, 0, BITMAP(1), BITMAP(2), memoryDc, 0, 0, SRCCOPY
}else{ // 現在の画面の上にロード
BitBlt hdc, ginfo_cx, ginfo_cy, BITMAP(1), BITMAP(2), memoryDc, 0, 0, SRCCOPY
}
DeleteDC memoryDc // メモリDC破棄
DeleteObject hImage // bmpハンドル破棄
redraw 1 // 画面更新
return
#global
// 以下サンプル
dialog "bmp",16,"ビットマップ"
if stat==0 : end
PicLoadByWin32Api refstr