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

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