home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / vb_tools / readonly / rdonly.c next >
C/C++ Source or Header  |  1992-11-12  |  2KB  |  79 lines

  1. /*******************************************************************
  2.  
  3. RDONLY.DLL 
  4. Jeff Simms 
  5. 72200,3173
  6. November 11, 1992
  7.  
  8. Declare Sub SetMsgFilter Lib "RDONLY.DLL" (ByVal hWnd As Integer)
  9.  
  10. Idea - 'TRUE' Read-Only scrolling text box.
  11.  
  12. Purpose - Subclass standard VB edit control to intercept messages, 
  13.       eliminating any indication of a normal textbox. One: trap
  14.       WM_SETCURSOR to keep the cursor from changing to IBEAM.
  15.       Two: trap WM_MOUSEMOVE and WM_LBUTTONDBLCLK to keep text
  16.       from being highlighted. Also HideCaret() on WM_SETFOCUS.
  17.                            
  18. LIBRARY        RDONLY
  19. DESCRIPTION    'Read Only TextBox'
  20. EXETYPE        WINDOWS
  21. CODE           PRELOAD MOVEABLE DISCARDABLE
  22. DATA           PRELOAD MOVEABLE SINGLE
  23. HEAPSIZE       1024
  24. EXPORTS        WEP              @1 RESIDENTNAME
  25.            SetMsgFilter     @2
  26.            MainFilterProc   @3
  27.  
  28. *******************************************************************/
  29.  
  30. #include <windows.h>
  31.  
  32. VOID __export FAR PASCAL SetMsgFilter(HWND);
  33. LONG __export FAR PASCAL MainFilterProc(HWND,unsigned,WORD,LONG);
  34.  
  35. HCURSOR hcursor;
  36. FARPROC  lpfnEditWndProc;
  37. HWND EDhWnd;
  38.  
  39. VOID __export FAR PASCAL SetMsgFilter(HWND hEditWnd)
  40. {
  41.     EDhWnd = hEditWnd;
  42.  
  43.     SendMessage(hEditWnd,EM_SETREADONLY,TRUE,0L);
  44.     HideCaret(EDhWnd);
  45.  
  46.     lpfnEditWndProc = (FARPROC) SetWindowLong(hEditWnd,GWL_WNDPROC,
  47.                  (DWORD)(FARPROC) MainFilterProc);
  48. }
  49.  
  50.  
  51.  
  52. LONG __export FAR PASCAL MainFilterProc(HWND hWnd,unsigned wMsg,WORD wParam,LONG lParam)
  53. {
  54.  
  55.       switch (wMsg)
  56.      {
  57.     case  WM_SETFOCUS:
  58.         CallWindowProc(lpfnEditWndProc,hWnd, wMsg, wParam, lParam);
  59.         HideCaret(EDhWnd);
  60.         return 0;
  61.  
  62.     case  WM_SETCURSOR:
  63.         hcursor = LoadCursor(NULL,IDC_IBEAM);
  64.         if (hcursor == GetCursor())
  65.         SetCursor(LoadCursor(NULL,IDC_ARROW));
  66.     case  WM_MOUSEMOVE:
  67.     case  WM_LBUTTONDBLCLK:
  68.         return 0;
  69.  
  70.     case  WM_DESTROY:
  71.         SetWindowLong(EDhWnd,GWL_WNDPROC, (DWORD)(FARPROC) lpfnEditWndProc);
  72.         PostMessage(EDhWnd,WM_DESTROY,0,0);
  73.         return 0;
  74.  
  75.       }
  76.  
  77.   return(CallWindowProc(lpfnEditWndProc,hWnd, wMsg, wParam, lParam));
  78. }
  79.