'bmp slideshow by Egbert Zijlema 'could probebly use some tweaking for dialog units and bmp size #COMPILE EXE #INCLUDE "WIN32API.INC" GLOBAL bmpfile AS ASCIIZ * 64, FilePath() AS STRING, counter AS LONG %IDNEXT = 100 %IDPREV = 200 CALLBACK FUNCTION GalleryDlg() STATIC hBmp AS LONG, hBmpDC AS LONG ' handles STATIC px AS LONG, py AS LONG ' pixel width/pixel height STATIC ux AS LONG, uy AS LONG ' unit width/unit height STATIC nxtBtn AS LONG, prevBtn AS LONG ' controls STATIC bm AS BITMAP ' pre-defined structure SELECT CASE CBMSG CASE %WM_INITDIALOG CONTROL HANDLE CBHNDL, %IDNEXT TO nxtBtn ' save handle for next button CONTROL HANDLE CBHNDL, %IDPREV TO prevBtn ' save handle for prev. button bmpfile = FilePath(counter) + CHR$ (0) ' convert string to ASCIIZ hBmp = LoadImage(0, bmpfile, %IMAGE_BITMAP, _ 0, 0, %LR_LOADFROMFILE) ' load external bitmap GetObject hBmp, SIZEOF(bm), BYVAL VARPTR(bm) ' get dimensions of external bitmap px = bm.bmWidth : ux = px \ 2 ' WIDTH: screen pixels / dialog units py = bm.bmHeight : uy = py \ 2 ' HEIGHT: scr. pix / dlg units DIALOG SET LOC CBHNDL, _ (GetSystemMetrics(%SM_CXSCREEN) - px) \ 4, _ (GetSystemMetrics(%SM_CYSCREEN) - py) \ 4 ' center dialog DIALOG SET SIZE CBHNDL, ux, uy ' adapt size in dlg. units CONTROL SET LOC CBHNDL, %IDPREV, 0, uy - 26 ' location of button control CONTROL SET LOC CBHNDL, %IDNEXT, ux - 12, uy - 26 ' location btn ctrl FUNCTION = 1 CASE %WM_ERASEBKGND ' display routine for bitmap hBmpDC = CreateCompatibleDC(CBWPARAM) SelectObject hBmpDC, hBmp BitBlt CBWPARAM, 0, 0, px, py, hBmpDC, 0, 0, %SRCCOPY DeleteDC hBmpDC FUNCTION = 1 CASE %WM_COMMAND IF CBLPARAM = nxtBtn THEN ' nextbutton pressed INCR counter ELSEIF (CBLPARAM = prevBtn) AND (counter > 1) THEN ' prev. button pressed DECR counter END IF DIALOG END CBHNDL FUNCTION = 0 EXIT FUNCTION CASE %WM_SYSCOMMAND counter = UBOUND(FilePath) + 1 ' close box pressed, quit CASE %WM_DESTROY DeleteObject hBmp END SELECT END FUNCTION SUB CreateCommonDialog() LOCAL hDlg AS LONG DIALOG NEW 0, "Slideshow", , , 100, 100, %WS_OVERLAPPED OR %WS_CAPTION OR %WS_SYSMENU, 0 TO hDlg CONTROL ADD BUTTON, hDlg, %IDNEXT, ">", 0, 0, 10, 14 CONTROL ADD BUTTON, hDlg, %IDPREV, "<", 0, 0, 10, 14 DIALOG SHOW MODAL hDlg, CALL GalleryDlg END SUB SUB CountBmpFiles(Cmd$) LOCAL FilNam AS STRING counter = 0 FilNam = DIR$(Cmd$ + "\*.BMP") DO WHILE LEN(FilNam) INCR counter FilNam = DIR$ LOOP DIM FilePath(1 : counter) END SUB SUB CollectBmpFiles(Cmd$) LOCAL FilNam AS STRING counter = 0 FilNam = DIR$(Cmd$ + "\*.BMP") DO WHILE LEN(FilNam) INCR counter FilePath(counter) = Cmd$ + "\" + FilNam FilNam = DIR$ LOOP END SUB FUNCTION PBMAIN() AS LONG Cmd$ = TRIM$(COMMAND$) IF LEN(Cmd$) = 0 THEN Cmd$ = CURDIR$ CountBmpFiles Cmd$ IF counter = 0 THEN MSGBOX "No bitmaps found", 16, "Slideshow" EXIT FUNCTION END IF CollectBmpFiles Cmd$ counter = 1 DO CreateCommonDialog LOOP UNTIL counter > UBOUND(FilePath) END FUNCTION