home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sb_bc.ddi / BC / CH5 / WINAPP-5.DSK (.txt) < prev    next >
Encoding:
Turbo C Context File  |  1991-12-10  |  11.4 KB  |  345 lines

  1. Turbo C Context File 
  2. WINAPP-5.CPP
  3. WINAPP-5.DEF
  4. PROG4-6.CPP
  5. PROG4-7.CPP
  6. *.CPP
  7. D:\WINAPP\*.DEF
  8. D:\WINAPP\*.C
  9. D:\WINAPP\*.H
  10. D:\WINAPP\*.CPP
  11.  void *.c 
  12. pragma
  13. cplusplus
  14. NOMINMAX
  15. cxChar
  16. cyChar
  17. cxCaps
  18. nMaxX
  19. cxClient
  20. ScrollWindow
  21. cyClient
  22. VScroll
  23. HScroll
  24. Buick
  25. FontSize.cxChar
  26. FontSize.cyChar
  27. FontSize.cxCaps
  28. FontSize.nMaxX
  29. ScrollWin
  30. *.DEF
  31. *.CPP
  32. chdemo
  33. chself
  34. lndemo
  35. lnself
  36. D:\WINAPP\WINAPP-2.C
  37. D:\BORLANDC\INCLUDE\WINDOWS.H
  38. D:\WINAPP\WINAPP-3.DEF
  39. D:\WINAPP\WINAPP-4.DEF
  40. D:\WINAPP\WINAPP-4.CPP
  41. D:\WINAPP\WINAPP-2.C
  42. D:\WINAPP\NONAME01.CPP
  43. P\WINAPP-4.CPP
  44. D:\BORLANDC\INCLUDE\WINDOWS.H
  45. D:\WINAPP\WHELLO.CPP
  46. D:\WINAPP\WINAPP-3.CPP
  47. D:\WINAPP\WINAPP-4.DEF
  48. D:\WINAPP\WINAPP-5.CPP
  49. D:\WINAPP\WINAPP-4.CPP
  50. D:\WINAPP\WINAPP-5.DEF
  51. D:\WINAPP\WINAPP-5.CPP
  52. long FAR PASCAL AppWndProc (HWND hwnd,
  53.                 WORD message,
  54.                 WORD wParam,
  55.                 LONG lParam)
  56. { HDC hdc ;
  57.   TEXTMETRIC tm ;
  58.   PAINTSTRUCT ps ;
  59.   static short int cxChar, cyChar, cxCaps, nMaxX ;
  60.   static short int cxClient, cyClient ;
  61.   static short int nVScrollMax, nVScrollPos ;
  62.   static short int nHScrollMax, nHScrollPos ;
  63.   short int nVScrollInc, nHScrollInc ;
  64.   short int nBeginLine, nEndLine ;
  65.   short int i,x,y ;
  66.   switch (message)
  67.     { case WM_CREATE :
  68.        hdc = GetDC(hwnd) ;
  69.        GetTextMetrics(hdc,&tm) ;
  70.        cxChar = tm.tmAveCharWidth ;
  71.        cyChar = tm.tmHeight + tm.tmExternalLeading ;
  72.        cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) *cxChar / 2 ;
  73.        ReleaseDC(hwnd,hdc) ;
  74.        nMaxX = 20 * cxCaps + 45 * cxChar ;
  75.        break ;
  76.       case WM_SIZE :
  77.        cxClient = LOWORD(lParam) ;
  78.        cyClient = HIWORD(lParam) ;
  79.        nVScrollMax = max(0, NUMLINE+2-cyClient/cyChar) ;
  80.        nVScrollPos = min(nVScrollMax,nVScrollPos) ;
  81.        SetScrollRange(hwnd, SB_VERT, 0, nVScrollMax, FALSE) ;
  82.        SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  83.        nHScrollMax = max(0, (nMaxX-cxClient)/cxChar+2) ;
  84.        nHScrollPos = min(nHScrollMax,nHScrollPos) ;
  85.        SetScrollRange(hwnd, SB_HORZ, 0, nHScrollMax, FALSE) ;
  86.        SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  87.        break ;
  88.       case WM_VSCROLL :
  89.        switch (wParam)
  90.          { case SB_TOP :
  91.             nVScrollInc = -nVScrollPos ;
  92.             break ;
  93.            case SB_BOTTOM :
  94.             nVScrollInc = nVScrollMax-nVScrollPos ;
  95.             break ;
  96.            case SB_LINEUP :
  97.             nVScrollInc = -1 ;
  98.             break ;
  99.            case SB_LINEDOWN :
  100.             nVScrollInc = 1 ;
  101.             break ;
  102.            case SB_PAGEUP :
  103.             nVScrollInc = min(-1,-cyClient/cyChar) ;
  104.             break ;
  105.            case SB_PAGEDOWN :
  106.             nVScrollInc = max(1,cyClient/cyChar) ;
  107.             break ;
  108.            case SB_THUMBTRACK :
  109.             nVScrollInc = LOWORD(lParam)-nVScrollPos ;
  110.             break ;
  111.            default :
  112.             nVScrollInc = 0 ;
  113.             break ;
  114.          }
  115.        nVScrollInc =  min(nVScrollInc , nVScrollMax-nVScrollPos) ;
  116.        nVScrollInc =  max(nVScrollInc , -nVScrollPos) ;
  117.        if (nVScrollInc)
  118.           { nVScrollPos += nVScrollInc ;
  119.         ScrollWindow(hwnd, 0, -cyChar*nVScrollInc, NULL, NULL) ;
  120.         SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  121.         UpdateWindow(hwnd) ;
  122.           }
  123.        break ;
  124.       case WM_HSCROLL :
  125.        switch (wParam)
  126.          { case SB_TOP :
  127.             nHScrollInc = -nHScrollPos ;
  128.             break ;
  129.            case SB_BOTTOM :
  130.             nHScrollInc = nHScrollMax-nHScrollPos ;
  131.             break ;
  132.            case SB_LINEUP :
  133.             nHScrollInc = -1 ;
  134.             break ;
  135.            case SB_LINEDOWN :
  136.             nHScrollInc = 1 ;
  137.             break ;
  138.            case SB_PAGEUP :
  139.             nHScrollInc = min(-1,-cxClient/cxChar) ;
  140.             break ;
  141.            case SB_PAGEDOWN :
  142.             nHScrollInc = max(1,cxClient/cxChar) ;
  143.             break ;
  144.            case SB_THUMBTRACK :
  145.             nHScrollInc = LOWORD(lParam)-nHScrollPos ;
  146.             break ;
  147.            default :
  148.             nHScrollInc = 0 ;
  149.             break ;
  150.          }
  151.        nHScrollInc =  min(nHScrollInc , nHScrollMax-nHScrollPos) ;
  152.        nHScrollInc =  max(nHScrollInc , -nHScrollPos) ;
  153.        if (nHScrollInc)
  154.           { nHScrollPos += nHScrollInc ;
  155.         ScrollWindow(hwnd, -cxChar*nHScrollInc, 0, NULL, NULL) ;
  156.         SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  157.         UpdateWindow(hwnd) ;
  158.           }
  159.        break ;
  160.       case WM_PAINT :
  161.        hdc = BeginPaint(hwnd, &ps) ;
  162.        nBeginLine = max(0,nVScrollPos + ps.rcPaint.top/cyChar - 1) ;
  163.        nEndLine = min(NUMLINE,nVScrollPos + ps.rcPaint.bottom/cyChar) ;
  164.        for (i=nBeginLine ; i<nEndLine ; i++)
  165.          { x = cxChar * (1-nHScrollPos) ;
  166.            y = cyChar * (1-nVScrollPos+i) ;
  167.            TextOut(hdc, x, y,
  168.                WinStruct[i].szStruct,
  169.                lstrlen(WinStruct[i].szStruct)) ;
  170.            TextOut(hdc, x+20*cxCaps, y,
  171.                WinStruct[i].szDescriptor,
  172.                lstrlen(WinStruct[i].szDescriptor)) ;
  173.          }
  174.        EndPaint(hwnd, &ps) ;
  175.        break ;
  176.       case WM_DESTROY :
  177.        PostQuitMessage(0) ;
  178.        break ;
  179.       default :
  180.        return DefWindowProc(hwnd, message, wParam, lParam) ;
  181.     }
  182.   return 0 ;
  183. long MainWindow::AppWndProc(WORD message, WORD wParam, LONG lParam)
  184. SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  185. #pragma hdrfile "windows.sym"
  186. #include <windows.h>
  187. #pragma hdrstop
  188. #include"winapp-2.h"
  189. VScroll.Set(SB_VERT) ;
  190.   HScroll.Set(SB_HORZ) ;
  191. #pragma hdrfile "windows.sym"
  192. #include <windows.h>
  193. #pragma hdrstop
  194. long FAR PASCAL AppWndProc (HWND hwnd,
  195.                 WORD message,
  196.                 WORD wParam,
  197.                 LONG lParam)
  198. { HDC hdc ;
  199.   TEXTMETRIC tm ;
  200.   PAINTSTRUCT ps ;
  201.   static short int cxChar, cyChar, cxCaps, nMaxX ;
  202.   static short int cxClient, cyClient ;
  203.   static short int nVScrollMax, nVScrollPos ;
  204.   static short int nHScrollMax, nHScrollPos ;
  205.   short int nVScrollInc, nHScrollInc ;
  206.   short int nBeginLine, nEndLine ;
  207.   short int i,x,y ;
  208.   switch (message)
  209.     { case WM_CREATE :
  210.        hdc = GetDC(hwnd) ;
  211.        GetTextMetrics(hdc,&tm) ;
  212.        cxChar = tm.tmAveCharWidth ;
  213.        cyChar = tm.tmHeight + tm.tmExternalLeading ;
  214.        cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) *cxChar / 2 ;
  215.        ReleaseDC(hwnd,hdc) ;
  216.        nMaxX = 20 * cxCaps + 45 * cxChar ;
  217.        break ;
  218.       case WM_SIZE :
  219.        cxClient = LOWORD(lParam) ;
  220.        cyClient = HIWORD(lParam) ;
  221.        nVScrollMax = max(0, NUMLINE+2-cyClient/cyChar) ;
  222.        nVScrollPos = min(nVScrollMax,nVScrollPos) ;
  223.        SetScrollRange(hwnd, SB_VERT, 0, nVScrollMax, FALSE) ;
  224.        SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  225.        nHScrollMax = max(0, (nMaxX-cxClient)/cxChar+2) ;
  226.        nHScrollPos = min(nHScrollMax,nHScrollPos) ;
  227.        SetScrollRange(hwnd, SB_HORZ, 0, nHScrollMax, FALSE) ;
  228.        SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  229.        break ;
  230.       case WM_VSCROLL :
  231.        switch (wParam)
  232.          { case SB_TOP :
  233.             nVScrollInc = -nVScrollPos ;
  234.             break ;
  235.            case SB_BOTTOM :
  236.             nVScrollInc = nVScrollMax-nVScrollPos ;
  237.             break ;
  238.            case SB_LINEUP :
  239.             nVScrollInc = -1 ;
  240.             break ;
  241.            case SB_LINEDOWN :
  242.             nVScrollInc = 1 ;
  243.             break ;
  244.            case SB_PAGEUP :
  245.             nVScrollInc = min(-1,-cyClient/cyChar) ;
  246.             break ;
  247.            case SB_PAGEDOWN :
  248.             nVScrollInc = max(1,cyClient/cyChar) ;
  249.             break ;
  250.            case SB_THUMBTRACK :
  251.             nVScrollInc = LOWORD(lParam)-nVScrollPos ;
  252.             break ;
  253.            default :
  254.             nVScrollInc = 0 ;
  255.             break ;
  256.          }
  257.        nVScrollInc =  min(nVScrollInc , nVScrollMax-nVScrollPos) ;
  258.        nVScrollInc =  max(nVScrollInc , -nVScrollPos) ;
  259.        if (nVScrollInc)
  260.           { nVScrollPos += nVScrollInc ;
  261.         ScrollWindow(hwnd, 0, -cyChar*nVScrollInc, NULL, NULL) ;
  262.         SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  263.         UpdateWindow(hwnd) ;
  264.           }
  265.        break ;
  266.       case WM_HSCROLL :
  267.        switch (wParam)
  268.          { case SB_TOP :
  269.             nHScrollInc = -nHScrollPos ;
  270.             break ;
  271.            case SB_BOTTOM :
  272.             nHScrollInc = nHScrollMax-nHScrollPos ;
  273.             break ;
  274.            case SB_LINEUP :
  275.             nHScrollInc = -1 ;
  276.             break ;
  277.            case SB_LINEDOWN :
  278.             nHScrollInc = 1 ;
  279.             break ;
  280.            case SB_PAGEUP :
  281.             nHScrollInc = min(-1,-cxClient/cxChar) ;
  282.             break ;
  283.            case SB_PAGEDOWN :
  284.             nHScrollInc = max(1,cxClient/cxChar) ;
  285.             break ;
  286.            case SB_THUMBTRACK :
  287.             nHScrollInc = LOWORD(lParam)-nHScrollPos ;
  288.             break ;
  289.            default :
  290.             nHScrollInc = 0 ;
  291.             break ;
  292.          }
  293.        nHScrollInc =  min(nHScrollInc , nHScrollMax-nHScrollPos) ;
  294.        nHScrollInc =  max(nHScrollInc , -nHScrollPos) ;
  295.        if (nHScrollInc)
  296.           { nHScrollPos += nHScrollInc ;
  297.         ScrollWindow(hwnd, -cxChar*nHScrollInc, 0, NULL, NULL) ;
  298.         SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  299.         UpdateWindow(hwnd) ;
  300.           }
  301.        break ;
  302.       case WM_PAINT :
  303.        hdc = BeginPaint(hwnd, &ps) ;
  304.        nBeginLine = max(0,nVScrollPos + ps.rcPaint.top/cyChar - 1) ;
  305.        nEndLine = min(NUMLINE,nVScrollPos + ps.rcPaint.bottom/cyChar) ;
  306.        for (i=nBeginLine ; i<nEndLine ; i++)
  307.          { x = cxChar * (1-nHScrollPos) ;
  308.            y = cyChar * (1-nVScrollPos+i) ;
  309.            TextOut(hdc, x, y,
  310.                WinStruct[i].szStruct,
  311.                lstrlen(WinStruct[i].szStruct)) ;
  312.            TextOut(hdc, x+20*cxCaps, y,
  313.                WinStruct[i].szDescriptor,
  314.                lstrlen(WinStruct[i].szDescriptor)) ;
  315.          }
  316.        EndPaint(hwnd, &ps) ;
  317.        break ;
  318.       case WM_DESTROY :
  319.        PostQuitMessage(0) ;
  320.        break ;
  321.       default :
  322.        return DefWindowProc(hwnd, message, wParam, lParam) ;
  323.     }
  324.   return 0 ;
  325. long MainWindow::AppWndProc(WORD message, WORD wParam, LONG lParam)
  326. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  327. #define max(a,b)            (((a) > (b)) ? (a) : (b))
  328. // Turn off warning: Parameter 'lpszCmdLine' is never used in function WinMain(unsigned int,unsigned int,char far*,int)
  329. #pragma argsused
  330. // Turn off warning: 'MainWnd' is assigned a value that is never used in function WinMain(unsigned int,unsigned int,char far*,int)
  331. #pragma option -w-aus
  332. VScroll.Set_nInc(VScroll.Get_nInc() - VScroll.Get_nPos()) ;
  333. VScroll.Set_nInc(VScroll.Get_nMax() - VScroll.Get_nPos()) ;
  334. VScroll.Set_nInc(-1) ;
  335. VScroll.Set_nInc(-1) ;
  336. VScroll.Set_nInc(min(VScroll.Get_nInc() ,
  337.                 VScroll.Get_nMax()-VScroll.Get_nPos()) ) ;
  338.        VScroll.Set_nInc(max(VScroll.Get_nInc() ,
  339.                 -VScroll.Get_nPos()) ) ;
  340. VScroll.Set_nPos(VScroll.Get_nPos() + VScroll.Get_nInc() ) ;
  341.         //nVScrollPos += nVScrollInc ;
  342.         ScrollWindow(hwnd, 0, -FontSize.cyChar*VScroll.Get_nInc(), NULL, NULL) ;
  343.         VScroll.SetPos(TRUE) ;
  344.         Update() ;
  345.