Code:
#DIM ALL 'end all if dialog1 ended
#INCLUDE "WIN32API.INC"
%NumDialogs = 4
GLOBAL ghdg() AS DWORD
FUNCTION PBMAIN () AS LONG
LOCAL i AS LONG
REDIM ghdg(1 TO %NumDialogs) AS DWORD
FOR i = LBOUND(ghdg) TO UBOUND(ghdg)
DIALOG NEW 0, "Dialog " + FORMAT$(i),_
50 + ((i - 1) * 110), 50 + ((i - 1) * 55), 200, 100, %WS_SYSMENU OR %WS_CAPTION TO ghdg(i)
NEXT i
FOR i = LBOUND(ghdg) TO UBOUND(ghdg)
DIALOG SHOW MODELESS ghdg(i), CALL MyCallback
NEXT i
DO
DIALOG DOEVENTS
FOR i = LBOUND(ghdg) TO UBOUND(ghdg)
IF ghdg(i) THEN ITERATE DO
NEXT i
EXIT DO
LOOP
MSGBOX "All dialogs have ended"
END FUNCTION
CALLBACK FUNCTION MyCallback() AS LONG
LOCAL i AS LONG
SELECT CASE CB.MSG
CASE %WM_SYSCOMMAND
IF (CB.WPARAM AND &hFFF0) = %SC_CLOSE THEN
IF CB.HNDL = ghdg(1) THEN 'close all
FOR i = LBOUND(ghdg) TO UBOUND(ghdg)
IF ghdg(i) THEN
DIALOG END ghdg(i), 0
ghdg(i) = 0
END IF
NEXT i
FUNCTION = %TRUE
ELSE 'close ghdg(i)
FOR i = LBOUND(ghdg) TO UBOUND(ghdg)
IF ghdg(i) = CB.HNDL THEN
ghdg(i) = 0
EXIT FOR
END IF
NEXT i
DIALOG END CB.HNDL, 0
FUNCTION = %TRUE
END IF
END IF
END SELECT
END FUNCTION