home *** CD-ROM | disk | FTP | other *** search
/ Shareware 1 2 the Maxx / sw_1.zip / sw_1 / WINDOWS / GRAPHICS / WINPTR.ZIP / WINPLIB.C next >
Text File  |  1992-01-03  |  7KB  |  229 lines

  1. //========================================================================
  2. // 
  3. //  WINPLIB.C - A library module for WINPTR.C
  4. //
  5. //  (c) Douglas Boling 1992
  6. //
  7. //  For better readability, set tab stops to every 3 characters.
  8. //
  9. //========================================================================
  10.  
  11. #include <windows.h>
  12. #include "winptr.h"
  13.  
  14. VOID        FAR PASCAL     KeyHookProc (int, WORD, LONG);
  15. HCURSOR    MarkCursor    (void);
  16.  
  17. FARPROC    lpfnNextHook;
  18. HANDLE    hInst;
  19. HCURSOR    hCursor, hSizeCursor;
  20. HCURSOR    hArrowCursor, hNSCursor, hWECursor, hNWSECursor, hNESWCursor;
  21. HCURSOR    hPrevCursor;
  22.  
  23. POINT        pLastPoint = {0,0};
  24. DWORD        dwLastTime;
  25. WORD        wCurID = 1;
  26. WORD        wMoveTrig = 10, wTimeTrig = 100;
  27. BYTE        ucHooked = 0;
  28. BYTE        ucArrowOnly = 0;
  29.  
  30. //=======================================================================
  31. //
  32. // Library initialization and terminataion functions
  33. //
  34. //=======================================================================
  35. //------------------------------------------------------------------------
  36. // LibMain - DLL initialization routine
  37. //------------------------------------------------------------------------
  38. int FAR PASCAL LibMain (HANDLE hInstance, WORD wDataSeg, WORD wHeapSize,
  39.                          LPSTR lpszCmdLine) {
  40.  
  41.     hInst = hInstance;
  42.     hCursor = LoadCursor (hInstance, MAKEINTRESOURCE (1));
  43.  
  44.     if (hCursor == 0)
  45.         return 0;
  46.  
  47.     hSizeCursor = LoadCursor (hInstance, MAKEINTRESOURCE (10));
  48.  
  49.     hArrowCursor = LoadCursor (0, IDC_ARROW);
  50.     hNSCursor = LoadCursor (0, IDC_SIZENS);
  51.     hWECursor = LoadCursor (0, IDC_SIZEWE);
  52.     hNESWCursor = LoadCursor (0, IDC_SIZENESW);
  53.     hNWSECursor = LoadCursor (0, IDC_SIZENWSE);
  54.  
  55.     return 1;
  56. }
  57. //------------------------------------------------------------------------
  58. // WEP - DLL termination routine
  59. //------------------------------------------------------------------------
  60. int FAR PASCAL WEP (int nParameter) {
  61.     if (ucHooked != 0)
  62.          SetWindowsHook (WH_GETMESSAGE, lpfnNextHook);
  63.  
  64.     return 1;
  65. }
  66. //------------------------------------------------------------------------
  67. // Mark cursor - Changes the cursor to the highlighted cursor
  68. //------------------------------------------------------------------------
  69. HCURSOR MarkCursor (void) {
  70.     HCURSOR    hOldCursor;
  71.  
  72.     hOldCursor = SetCursor (hCursor);
  73.  
  74.     if (ucArrowOnly && hOldCursor != hArrowCursor) {
  75.         SetCursor (hOldCursor);
  76.         return hOldCursor;
  77.     }
  78.     if (hOldCursor != hArrowCursor) {
  79.         if (hOldCursor == hCursor) return 0; 
  80.  
  81.         if (hOldCursor == hNSCursor || hOldCursor == hWECursor ||
  82.             hOldCursor == hNWSECursor || hOldCursor == hNESWCursor ||
  83.             hOldCursor == hSizeCursor)
  84.             SetCursor (hSizeCursor);
  85.     }    
  86.     return hOldCursor;
  87. }
  88.  
  89. //========================================================================
  90. //
  91. // Hook function
  92. //
  93. //========================================================================
  94. VOID FAR PASCAL MsgHookProc (int code, WORD wParam, LONG lParam) {
  95.  
  96.     int        sDiffX, sDiffY;
  97.     DWORD        rc;
  98.     LPMSG        lpmMsg;
  99.     HCURSOR    hTemp;
  100.  
  101.     rc = DefHookProc (code, wParam, lParam, &lpfnNextHook);
  102.     if (code < 0) return;
  103.  
  104.     lpmMsg = lParam;
  105.  
  106.     if ((lpmMsg->message == WM_MOUSEMOVE) ||
  107.         (lpmMsg->message == WM_NCMOUSEMOVE)) {
  108.  
  109.         sDiffX = lpmMsg->pt.x - pLastPoint.x;
  110.         sDiffY = lpmMsg->pt.y - pLastPoint.y;
  111.         if (sDiffX < 0) sDiffX = pLastPoint.x - lpmMsg->pt.x;
  112.         if (sDiffY < 0) sDiffY = pLastPoint.y - lpmMsg->pt.y;
  113.  
  114.         if ((sDiffX > (int) wMoveTrig) || (sDiffY > (int) wMoveTrig)) 
  115.             dwLastTime = lpmMsg->time;
  116.  
  117.         pLastPoint.x = lpmMsg->pt.x;
  118.         pLastPoint.y = lpmMsg->pt.y;
  119.     }
  120.     if ((lpmMsg->time - dwLastTime) < (DWORD) wTimeTrig) {
  121.         if (hTemp = MarkCursor ())
  122.             hPrevCursor = hTemp;
  123.     }
  124.     return;
  125. }
  126.  
  127. //========================================================================
  128. //
  129. // Library exported functions
  130. //
  131. //========================================================================
  132. //------------------------------------------------------------------------
  133. //
  134. // GetStatus - Returns Status information
  135. //
  136. //------------------------------------------------------------------------
  137. VOID FAR PASCAL GetStatus (PHOOKSTAT phsStatus){
  138.  
  139.     phsStatus -> wMoveTrig = wMoveTrig;
  140.     phsStatus -> wTimeTrig = wTimeTrig;
  141.     phsStatus -> wCursorID = wCurID;
  142.     if (ucHooked)
  143.         phsStatus -> bEnabled = TRUE;
  144.     else
  145.         phsStatus -> bEnabled = FALSE;
  146.     if (ucArrowOnly)
  147.         phsStatus -> bArrowOnly = TRUE;
  148.     else
  149.         phsStatus -> bArrowOnly = FALSE;
  150.      return;
  151. }
  152. //------------------------------------------------------------------------
  153. //
  154. // LocatePointer - Locates the Windows Cursor by changing the cursor shape
  155. // 
  156. //------------------------------------------------------------------------
  157. BOOL FAR PASCAL LocatePointer (VOID) {
  158.  
  159.     return MarkCursor ();
  160. }
  161. //------------------------------------------------------------------------
  162. //
  163. // SetLocate - Enables and disables the pointer locate function
  164. // 
  165. //------------------------------------------------------------------------
  166. BOOL FAR PASCAL SetLocate (BOOL bEnable) {
  167.  
  168.     if (bEnable) {
  169.         if (ucHooked == 0) {
  170.             lpfnNextHook = SetWindowsHook (WH_GETMESSAGE, 
  171.                                        GetProcAddress (hInst, "MsgHookProc"));
  172.             ucHooked++;
  173.         }
  174.     } else {
  175.         if (ucHooked != 0) {
  176.              SetWindowsHook (WH_GETMESSAGE, lpfnNextHook);
  177.             ucHooked--;
  178.         }
  179.     }
  180.     return TRUE;
  181. }
  182. //------------------------------------------------------------------------
  183. //
  184. // SetTriggers - Sets the Trigger values.
  185. //
  186. //------------------------------------------------------------------------
  187. BOOL FAR PASCAL SetTriggers (int sNewMTrig, int sNewTTrig) {
  188.  
  189.     wMoveTrig = sNewMTrig;
  190.     wTimeTrig = sNewTTrig;
  191.     
  192.      return TRUE;
  193. }
  194. //------------------------------------------------------------------------
  195. //
  196. // SetCursorID - Sets the Cursor to be used
  197. //
  198. //------------------------------------------------------------------------
  199. BOOL FAR PASCAL SetCursorID (WORD wCursorID) {
  200.     HCURSOR    hCurTemp;
  201.  
  202.     if (hCurTemp = LoadCursor (hInst, MAKEINTRESOURCE (wCursorID))) {
  203.         hCursor = hCurTemp;
  204.         wCurID = wCursorID;
  205.  
  206.         if (wCursorID % 2)
  207.             hSizeCursor = LoadCursor (hInst, MAKEINTRESOURCE (20));
  208.         else
  209.             hSizeCursor = LoadCursor (hInst, MAKEINTRESOURCE (21));
  210.  
  211.         dwLastTime = 0;
  212.         pLastPoint.x = 0;
  213.         pLastPoint.y = 0;
  214.         return TRUE;
  215.     }    
  216.      return FALSE;
  217. }
  218. //------------------------------------------------------------------------
  219. //
  220. // SetArrowOnly - Sets the Change Arrow Cursor Only Flag
  221. //
  222. //------------------------------------------------------------------------
  223. VOID FAR PASCAL SetArrowOnly (BOOL bArrowOnly) {
  224.  
  225.     ucArrowOnly = (BYTE) bArrowOnly;    
  226.      return;
  227. }
  228. 
  229.