#include #include "fuse2.h" /***************** Brian's incredible Fuse app. This program was compiled Win 3.0 SDK and MSC 6.0. Brian Farmer Computer Science Center University of Maryland College Park, MD 20742 brianf@umd5.umd.edu ******************/ #define max_fuses 40 HANDLE hInst; typedef struct FUSESTR { int x1, y1, x2, y2; BOOL drawn; } FUSE; FUSE fuses[max_fuses]; int dx1, dy1, dx2, dy2, xextent, yextent; HWND hDesk; HPEN mypen; FARPROC oldproc; long FAR PASCAL MyProc (HWND hWnd, WORD message, WORD wParam, LONG lParam) { if (message == WM_ERASEBKGND) ReDoLines (); CallWindowProc (oldproc, hWnd, message, wParam, lParam); } void SetBack (HWND hWnd) { oldproc = (FARPROC)GetWindowLong (hWnd, GWL_WNDPROC); SetWindowLong (hWnd, GWL_WNDPROC, (LONG)MakeProcInstance ((FARPROC)MyProc, hInst)); } void InitFuses(void) { int i; RECT rect; hDesk = GetDesktopHwnd (); SetBack (hDesk); GetClientRect (hDesk, &rect); yextent = rect.bottom-rect.top; xextent = rect.right-rect.left; mypen = CreatePen (0, 1, RGB (255, 255, 255)); for (i=0;ix1, fuse->y1); LineTo (hDC, fuse->x2, fuse->y2); } int MyRand () { return (rand ()/3277); } void MoveFuse (FUSE *previous, FUSE *tomove) { tomove->x1 = previous->x1 + dx1; tomove->x2 = previous->x2 + dx2; tomove->y1 = previous->y1 + dy1; tomove->y2 = previous->y2 + dy2; if (tomove->x1 > xextent) dx1 = -MyRand (); if (tomove->x1 < 0) dx1 = MyRand (); if (tomove->x2 > xextent) dx2 = -MyRand (); if (tomove->x2 < 0) dx2 = MyRand (); if (tomove->y1 > yextent) dy1 = -MyRand (); if (tomove->y1 < 0) dy1 = MyRand (); if (tomove->y2 > yextent) dy2 = -MyRand (); if (tomove->y2 < 0) dy2 = MyRand (); } void ReDoLines () { static int current=0; HDC hDC; int oldrop, i; HANDLE oldpen; hDC = GetDC (hDesk); oldrop = SetROP2 (hDC, R2_XORPEN); oldpen = SelectObject (hDC, mypen); for (i=0; i