home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
os2bnd01.zip
/
wintest.adb
< prev
Wrap
Text File
|
1995-10-15
|
5KB
|
141 lines
-- quick-and-dirty test program for the OS/2 bindings package
--
-- build (GNAT 2.06):
-- gcc -c wintest.adb
-- gnatbl wintest.ali -o wintest
-- emxbind -p wintest
with OS2; use OS2;
with Interfaces.C.Strings; use Interfaces.C.Strings;
procedure WinTest is
hand_ab: HAB;
hand_mq: HMQ;
hand_frame: HWND;
q_mess: PQMSG := new QMSG;
flFlags: PULONG;
boolrc: BOOL;
class: PCSZ := New_String("MyClass");
title: PCSZ := New_String("A Window of MyClass");
ulongrc: ULONG;
p_space: HPS;
-- the message handler
function window_func(handle : HWND; mess: ULONG;
parm1: MPARAM; parm2: MPARAM) return MRESULT is
coords: PPOINTL := new POINTL;
longrc: LONG;
helptext: PCSZ := New_String("click-move-release mouse button 1 or 2 to draw lines or boxes");
begin
case mess is
when WM_PAINT =>
p_space := WinBeginPaint(handle, NULLHANDLE, NULL);
boolrc := GpiSetBackMix(p_space, BM_OVERPAINT);
coords.x := 10;
coords.y := 10;
boolrc := GpiSetColor(p_space, CLR_BLACK);
longrc := GpiCharStringAt(p_space,
coords,
LONG(Strlen(helptext)),
helptext);
return OS2.FALSE;
when WM_BUTTON1DOWN | WM_BUTTON2DOWN =>
coords.x := LONG(SHORT1FROMMP(parm1));
coords.y := LONG(SHORT2FROMMP(parm1));
boolrc := GpiSetCurrentPosition(p_space, coords);
return OS2.FALSE;
when WM_BUTTON1UP =>
coords.x := LONG(SHORT1FROMMP(parm1));
coords.y := LONG(SHORT2FROMMP(parm1));
boolrc := GpiSetColor(p_space, CLR_BLUE);
longrc := GpiLine(p_space, coords);
return OS2.FALSE;
when WM_BUTTON2UP =>
coords.x := LONG(SHORT1FROMMP(parm1));
coords.y := LONG(SHORT2FROMMP(parm1));
boolrc := GpiSetColor(p_space, CLR_RED);
longrc := GpiBox(p_space, DRO_FILL, coords, 0, 0);
return OS2.FALSE;
when WM_ERASEBACKGROUND =>
return OS2.TRUE;
when WM_CLOSE =>
boolrc := WinEndPaint(p_space);
ulongrc := WinMessageBox(HWND_DESKTOP,
handle,
New_String("Thanks for making a " &
"simple program very happy."),
New_String("Goodbye"),
0,
MB_OK+MB_MOVEABLE+MB_ICONEXCLAMATION);
return WinDefWindowProc(handle, mess, parm1, parm2);
when others =>
return WinDefWindowProc(handle, mess, parm1, parm2);
end case;
end window_func;
begin
flFlags := new ULONG'(FCF_TITLEBAR+
FCF_SIZEBORDER+
FCF_MINMAX+
FCF_SYSMENU+
FCF_VERTSCROLL+
FCF_HORZSCROLL+
FCF_TASKLIST+
FCF_SHELLPOSITION);
hand_ab := WinInitialize(0);
hand_mq := WinCreateMsgQueue(hand_ab, 0);
boolrc := WinRegisterClass(hand_ab,
class,
window_func'access, -- caution
CS_SIZEREDRAW,
0);
hand_frame := WinCreateStdWindow(HWND_DESKTOP,
WS_VISIBLE,
flFlags,
class,
title,
WS_VISIBLE,
0,
0,
NULL);
boolrc := BOOL(WinSendMsg(hand_frame,
WM_SETICON,
MPARAM(WinQuerySysPointer(HWND_DESKTOP,
SPTR_ICONINFORMATION,
0)),
0));
while WinGetMsg(hand_ab, q_mess, HWND(0), 0, 0) = OS2.TRUE
loop
boolrc:= BOOL(WinDispatchMsg(hand_ab, q_mess));
end loop;
boolrc := WinDestroyWindow(hand_frame);
boolrc := WinDestroyMsgQueue(hand_mq);
boolrc := WinTerminate(hand_ab);
end WinTest;
-- eof