home *** CD-ROM | disk | FTP | other *** search
- #define WIN31
- #include <windows.h>
- #include <scrnsave.h>
- #include "cparrow.h"
- #include "comstrin.h"
- #include "uniconv.h"
-
-
- /* Global variables... */
- HANDLE hMainInst;
- HWND hMainWindow;
-
- TCHAR szName[TITLEBARNAMELEN];
- TCHAR szAppName[APPNAMEBUFFERLEN]; // Section name in CONTROL.INI
- TCHAR szIniFile[MAXFILELEN];
- TCHAR szScreenSaver[22];
- TCHAR szHelpFile[MAXFILELEN];
- TCHAR szNoHelpMemory[BUFFLEN];
- UINT MyHelpMessage;
-
-
- /* Local Function definitions... */
- BOOL AppInit (HANDLE hInst, HANDLE hPrev, WORD sw, LPTSTR szCmdLine);
- int DoConfigureDialog (HANDLE hInst, BOOL fParent);
-
- HCURSOR hcurOld;
-
- HHOOK hhkNextMsgFilterHookFunc = NULL;
-
- LRESULT CALLBACK HelpMessageFilterHookFunction (int nCode, WPARAM wParam, LPMSG lpMsg);
-
- #define THRESHOLD 3
-
-
- //***************************************************************************
-
- BOOL AppInit (HANDLE hInst, HANDLE hPrev, WORD sw, LPTSTR szCmdLine)
- {
- WNDCLASS cls;
- int dx, dy;
-
- if (hPrev != NULL)
- return FALSE;
-
- /*
- * Register a class for the main application window
- */
- cls.hCursor = NULL;
- cls.hIcon = LoadIcon (hInst, MAKEINTATOM (ID_APP));
- cls.lpszMenuName = NULL;
- cls.lpszClassName = TEXT("WindowsScreenSaverClass");
- cls.hbrBackground = GetStockObject (BLACK_BRUSH);
- cls.hInstance = hInst;
- cls.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
- cls.lpfnWndProc = ScreenSaverProc;
- cls.cbWndExtra = 0;
- cls.cbClsExtra = 0;
-
- if (!RegisterClass (&cls))
- return FALSE;
-
- dx = GetSystemMetrics (SM_CXSCREEN);
- dy = GetSystemMetrics (SM_CYSCREEN);
- hMainWindow = CreateWindowEx (WS_EX_TOPMOST,
- TEXT("WindowsScreenSaverClass"), // Class name
- TEXT("\0"), // Caption
- WS_POPUP | WS_VISIBLE | // Style bits
- WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
- 0, 0, // Position
- dx, dy, // Size
- (HWND)NULL, // Parent window (no parent)
- (HMENU)NULL, // use class menu
- (HANDLE)hInst, // handle to window instance
- (LPVOID)NULL // no params to pass on
- );
- if (hMainWindow)
- return TRUE;
-
- return FALSE;
- }
-
-
- //***************************************************************************
-
- int _CRTAPI1 main (USHORT argc, CHAR **argv)
- {
- HANDLE hInst;
- HANDLE hPrev = NULL;
- LPTSTR szCmdLine = GetCommandLine();
- WORD sw = SW_SHOWNORMAL;
- MSG msg;
- LPTSTR lpT;
-
- hInst = GetModuleHandle (NULL);
-
- /* Save instance handle for DialogBoxs */
- hMainInst = hInst;
-
- // This has to be loaded first so we know who we are and to find if we
- // already around.
-
- LoadString (hInst, idsAppName, szAppName, CharSizeOf(szAppName));
-
- //=================================================================
- // on NT, szCmdLine's first string includes its own name, remove this
- // to make it exactly like the windows command line.
-
- if (*szCmdLine)
- {
- lpT = _tcschr (szCmdLine, TEXT(' ')); // skip self name
- if (lpT)
- {
- szCmdLine = lpT;
- while (*szCmdLine == TEXT(' '))
- szCmdLine++; // skip spaces to end or first cmd
- }
- else
- {
- szCmdLine += lstrlen(szCmdLine); // point to NULL
- }
- }
- //=====================================================================
-
- MyHelpMessage = RegisterWindowMessage (szAppName);
-
- if (MyHelpMessage)
- hhkNextMsgFilterHookFunc = SetWindowsHook (WH_MSGFILTER,
- (HOOKPROC)HelpMessageFilterHookFunction);
- /* Parse through the command line. If the parameter is -s, /s, or s, then
- bring up a configure dialog box. Otherwise, bring up the normal
- window...*/
- if (!((!_tcsnicmp (szCmdLine, TEXT("/s"), 2) || !_tcsicmp (szCmdLine, TEXT("-s"))) ||
- !_tcsicmp (szCmdLine, TEXT("s"))))
- {
- if (!((!_tcsicmp (szCmdLine, TEXT("/c")) || !_tcsicmp (szCmdLine, TEXT("-c"))) ||
- !_tcsicmp (szCmdLine, TEXT("c"))))
- return DoConfigureDialog (hInst, FALSE);
- else
- return DoConfigureDialog (hInst, TRUE);
- }
-
- /* Call initialization procedure */
- if (!AppInit (hInst, hPrev, sw, szCmdLine))
- return FALSE;
-
- /* Message Loop for the program... */
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
-
- if (MyHelpMessage)
- UnhookWindowsHook (WH_MSGFILTER, (HOOKPROC)HelpMessageFilterHookFunction);
-
- return msg.wParam;
- }
-
-
- //***************************************************************************
-
-
- LONG DefScreenSaverProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- static BOOL fHere = FALSE;
- static POINT ptLast;
- static BOOL bDialogUp = FALSE;
- POINT ptCursor, ptCheck;
-
- switch (msg)
- {
- case WM_SYSCOMMAND:
- if ((wParam==SC_SCREENSAVE) || (wParam==SC_CLOSE))
- return FALSE;
- break;
-
- case WM_DESTROY:
- PostQuitMessage (0);
- break;
-
- case WM_SETCURSOR:
- SetCursor (NULL);
- break;
-
- case WM_NCACTIVATE:
- if (wParam==FALSE && !bDialogUp)
- return FALSE;
- break;
-
- case WM_ACTIVATE:
- case WM_ACTIVATEAPP:
- if (wParam != FALSE) // only fall through if we are
- break; // losing the focus...
-
- case WM_MOUSEMOVE:
- if (!fHere)
- {
- GetCursorPos (&ptLast);
- fHere = TRUE;
- }
- else
- {
- GetCursorPos (&ptCheck);
- if (ptCursor.x = ptCheck.x - ptLast.x)
- {
- if (ptCursor.x < 0)
- ptCursor.x *= -1;
- }
- if (ptCursor.y = ptCheck.y - ptLast.y)
- {
- if (ptCursor.y < 0)
- ptCursor.y *= -1;
- }
- if ((ptCursor.x + ptCursor.y) > THRESHOLD)
- goto SHOWDIALOG;
- }
- break;
-
- case WM_LBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_RBUTTONDOWN:
- GetCursorPos (&ptCursor);
- ptCursor.x ++;
- ptCursor.y ++;
- SetCursorPos (ptCursor.x, ptCursor.y);
- GetCursorPos (&ptCheck);
- if (ptCheck.x != ptCursor.x && ptCheck.y != ptCursor.y)
- ptCursor.x -= 2;
- ptCursor.y -= 2;
- SetCursorPos (ptCursor.x, ptCursor.y);
-
- // fall thru
-
- case WM_KEYDOWN:
- case WM_SYSKEYDOWN:
- SHOWDIALOG:
- PostMessage (hWnd, WM_CLOSE, 0, 0l);
- break;
- }
- return DefWindowProc (hWnd, msg, wParam, lParam);
- }
-
-
- //***************************************************************************
-
- int DoConfigureDialog (HANDLE hInst, BOOL fParent )
- {
- HWND hWndParent;
-
- if (fParent)
- hWndParent = GetActiveWindow ();
- else
- hWndParent = NULL;
-
- if (RegisterDialogClasses (hInst))
- {
- hMainWindow = NULL;
- DialogBox (hInst, MAKEINTRESOURCE (DLG_SCRNSAVECONFIGURE),
- hWndParent, (WNDPROC) ScreenSaverConfigureDialog);
- }
-
- return TRUE;
- }
-
- //***************************************************************************
-
- LRESULT CALLBACK HelpMessageFilterHookFunction (int nCode, WPARAM wParam, LPMSG lpMsg)
- {
-
- if (nCode < 0)
- goto DefHook;
-
- if (nCode == MSGF_DIALOGBOX)
- if (lpMsg->message == WM_KEYDOWN && lpMsg->wParam == VK_F1)
- {
- HWND hTemp;
- HWND hParent = lpMsg->hwnd;
-
- while (hParent != NULL)
- {
- hTemp = hParent;
- if (!(GetWindowLong(hTemp, GWL_STYLE) & WS_CHILD))
- break;
- hParent = (HWND) GetWindowLong (hParent, GWL_HWNDPARENT);
- }
-
- PostMessage (hTemp, MyHelpMessage, 0, 0L);
- return TRUE;
- }
- else
- DefHook:
- return (int)DefHookProc(nCode, wParam, (LONG)lpMsg, &hhkNextMsgFilterHookFunc);
-
- return 0;
- }
-
-