『HSPの裏技』イメージリストを使ってみる(HSP2.x 版)をHSP3.x バージョンへ書き換えたものです。
http://chokuto.ifdef.jp/urawaza/imagelist.html
※このサンプルで読み込まれるビットマップファイル iconlist.bmp は上記URLで公開されているものを使用することを仮定しています。
『HSPの裏技』イメージリストを使ってみる(HSP2.x 版)をHSP3.x バージョンへ書き換えたものです。
http://chokuto.ifdef.jp/urawaza/imagelist.html
※このサンプルで読み込まれるビットマップファイル iconlist.bmp は上記URLで公開されているものを使用することを仮定しています。
;【HSP3.x 移植版】;『HSPの裏技』イメージリストを使ってみる; http://chokuto.ifdef.jp/urawaza/imagelist.html; ※ファイル iconlist.bmp は上記URLで公開されているものを使用;; [参照]『Advanced HSP』ビットマップオブジェクト; http://chokuto.ifdef.jp/advanced/bitmapobject.html#module ;###### ビットマップオブジェクト作成モジュール ##########uselib "gdi32.dll"#cfunc CreateCompatibleDC "CreateCompatibleDC" int#cfunc CreateCompatibleBitmap "CreateCompatibleBitmap" int, int, int#func SelectObject "SelectObject" int, int#func BitBlt "BitBlt" int, int, int, int, int, int, int, int, int#func DeleteDC "DeleteDC" int#func DeleteObject "DeleteObject" int#define SRCCOPY 0x00CC0020; DIBセクションオブジェクト作成#defcfunc CreateDIB int px, int py, int sx, int sy; DIBセクションオブジェクト作成hBitmap = CreateCompatibleBitmap(hdc, sx, sy); メモリデバイスコンテキスト作成hdcMemory = CreateCompatibleDC(hdc); ビットマップをデバイスコンテキストに選択SelectObject hdcMemory, hBitmaphOldBitmap = stat; HSPウィンドウからビットマップにイメージをコピーBitBlt hdcMemory, 0, 0, sx, sy, hdc, px, py, SRCCOPY; デバイスコンテキストの選択ビットマップを戻すSelectObject hdcMemory, hOldBitmap; デバイスコンテキストを削除DeleteDC hdcMemory; ビットマップオブジェクト(DIBセクション)のハンドルを返すreturn hBitmap; DIBオブジェクト削除#deffunc DeleteDIB int hbmp; ビットマップオブジェクトを削除DeleteObject hbmpreturn#global ;############# モジュール終わり #########################module ;########### イメージリスト操作モジュール ###############uselib "comctl32.dll"#cfunc ImageList_Create "ImageList_Create" int,int,int,int,int#func ImageList_Destroy "ImageList_Destroy" int#func ImageList_AddMasked "ImageList_AddMasked" int,int,int#func ImageList_Draw "ImageList_Draw" int,int,int,int,int,int#define global ILC_COLOR 0x0000#define global ILC_COLOR4 0x0004#define global ILC_COLOR8 0x0018#define global ILC_COLOR16 0x0010#define global ILC_COLOR24 0x0018#define global ILC_COLOR32 0x0020#define global ILC_COLORDDB 0x00FE#define global ILC_MASK 0x0001#define ILD_TRANSPARENT 0x0001; イメージリスト作成#defcfunc CreateImageList int sx, int sy, int type, int numreturn ImageList_Create(sx, sy, type, num, 0); メージリスト破棄#deffunc DestroyImageList int handleImageList_Destroy handlereturn; イメージリストに描画中ウィンドウのイメージ追加#deffunc AddImageListItem int handle, int cx, int cy, int sx, int sy, int maskColor; DIB作成hDIB = CreateDIB(cx, cy, sx, sy); ビットマップをイメージリストに追加ImageList_AddMasked handle, hDIB, maskColorfirstItemIndex = stat; DIB削除DeleteDIB hDIBreturn firstItemIndex; イメージリストのイメージ描画#deffunc DrawImageListItem int handle, int index, int cx, int cyImageList_Draw handle, index, hdc, cx, cy, ILD_TRANSPARENTreturn#global ;############# モジュール終わり ########################; ビットマップファイルの読み込みbuffer 2,,, 0 ; フルカラーモードpicload "iconlist.bmp"; 24bit DIB イメージリスト作成(マスクなし)hImgList1 = CreateImageList(32, 32, ILC_COLOR24, 4)AddImageListItem hImgList1, 0, 0, 32*4, 32; 24bit DIB イメージリスト作成(マスクあり)hImgList2 = CreateImageList(32, 32, ILC_COLOR24 | ILC_MASK, 4)AddImageListItem hImgList2, 0, 0, 32*4, 32, 0xF0CAA6gsel 0cls 3 ; いったん塗りつぶしpos 20, 10 : mes "マスクなし"repeat 4DrawImageListItem hImgList1, cnt, 40*cnt+30, 30looppos 20, 80 : mes "マスクあり"repeat 4DrawImageListItem hImgList2, cnt, 40*cnt+30, 100loopredraw ; redraw は必須onexit goto *OnExitAppstop*OnExitApp; 終了時の処理(イメージリスト破棄)DestroyImageList hImgList1DestroyImageList hImgList2end