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

  1. Turbo C Context File 
  2. WMENU-2.RES
  3. WMENU-3.CPP
  4. WMENU-3.DEF
  5. SET.CPP
  6. INTSET.CPP
  7. INTSET.HPP
  8. SETTEST.CPP
  9. TTEST.CPP
  10. D:\*.H
  11. *D:*.H
  12. C:QUES1.
  13. D:*.H
  14. D:*.PRG
  15. E:*.PRG
  16. *.CPP
  17. *.BAK
  18.  void *.c 
  19. Cadillac
  20. SB_VERT
  21. defined
  22. cplusplus
  23. MAKELONG
  24. BITMAP
  25. GetHandle
  26. GetHAndle
  27. Buick
  28. GetHWND
  29. *.DEF
  30. *.CPP
  31. *.RES
  32. chdemo
  33. chself
  34. lndemo
  35. lnself
  36. D:\WINAPP\WMENU-2.C
  37. D:\WINAPP\TEMP.C
  38. D:\WINAPP\TEMP2.C
  39. D:\WINAPP\TEMP.C
  40. D:\WINAPP\WACCEL-2.CPP
  41. D:\WINAPP\WACCEL-1.C
  42. D:\WINAPP\WMENU-2.C
  43. D:\WINAPP\NONAME00.CPP
  44. D:\WINAPP\WACCEL-1.C
  45. D:\WINAPP\WACCEL-1.DEF
  46. D:\WINAPP\WACCEL-2.CPP
  47. D:\WINAPP\WACCEL-2.DEF
  48. D:\WINAPP\WMENU-3.DEF
  49. D:\WINAPP\WMENU-3.DEF
  50. D:\WINAPP\WMENU-3.CPP
  51. long FAR PASCAL AppWndProc (HWND hwnd,
  52.                 WORD message,
  53.                 WORD wParam,
  54.                 LONG lParam)
  55. { HDC hdc ;
  56.   TEXTMETRIC tm ;
  57.   PAINTSTRUCT ps ;
  58.   static short int cxChar, cyChar, cxCaps, nMaxX ;
  59.   static short int cxClient, cyClient ;
  60.   static short int nVScrollMax, nVScrollPos ;
  61.   static short int nHScrollMax, nHScrollPos ;
  62.   short int nVScrollInc, nHScrollInc ;
  63.   short int nBeginLine, nEndLine ;
  64.   short int i,x,y ;
  65.   switch (message)
  66.     { case WM_CREATE :
  67.        hdc = GetDC(hwnd) ;
  68.        GetTextMetrics(hdc,&tm) ;
  69.        cxChar = tm.tmAveCharWidth ;
  70.        cyChar = tm.tmHeight + tm.tmExternalLeading ;
  71.        cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) *cxChar / 2 ;
  72.        ReleaseDC(hwnd,hdc) ;
  73.        nMaxX = 20 * cxCaps + 45 * cxChar ;
  74.        break ;
  75.       case WM_SIZE :
  76.        cxClient = LOWORD(lParam) ;
  77.        cyClient = HIWORD(lParam) ;
  78.        nVScrollMax = max(0, NUMLINE+2-cyClient/cyChar) ;
  79.        nVScrollPos = min(nVScrollMax,nVScrollPos) ;
  80.        SetScrollRange(hwnd, SB_VERT, 0, nVScrollMax, FALSE) ;
  81.        SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  82.        nHScrollMax = max(0, (nMaxX-cxClient)/cxChar+2) ;
  83.        nHScrollPos = min(nHScrollMax,nHScrollPos) ;
  84.        SetScrollRange(hwnd, SB_HORZ, 0, nHScrollMax, FALSE) ;
  85.        SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  86.        break ;
  87.       case WM_VSCROLL :
  88.        switch (wParam)
  89.          { case SB_TOP :
  90.             nVScrollInc = -nVScrollPos ;
  91.             break ;
  92.            case SB_BOTTOM :
  93.             nVScrollInc = nVScrollMax-nVScrollPos ;
  94.             break ;
  95.            case SB_LINEUP :
  96.             nVScrollInc = -1 ;
  97.             break ;
  98.            case SB_LINEDOWN :
  99.             nVScrollInc = 1 ;
  100.             break ;
  101.            case SB_PAGEUP :
  102.             nVScrollInc = min(-1,-cyClient/cyChar) ;
  103.             break ;
  104.            case SB_PAGEDOWN :
  105.             nVScrollInc = max(1,cyClient/cyChar) ;
  106.             break ;
  107.            case SB_THUMBTRACK :
  108.             nVScrollInc = LOWORD(lParam)-nVScrollPos ;
  109.             break ;
  110.            default :
  111.             nVScrollInc = 0 ;
  112.             break ;
  113.          }
  114.        nVScrollInc =  min(nVScrollInc , nVScrollMax-nVScrollPos) ;
  115.        nVScrollInc =  max(nVScrollInc , -nVScrollPos) ;
  116.        if (nVScrollInc)
  117.           { nVScrollPos += nVScrollInc ;
  118.         ScrollWindow(hwnd, 0, -cyChar*nVScrollInc, NULL, NULL) ;
  119.         SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  120.         UpdateWindow(hwnd) ;
  121.           }
  122.        break ;
  123.       case WM_HSCROLL :
  124.        switch (wParam)
  125.          { case SB_TOP :
  126.             nHScrollInc = -nHScrollPos ;
  127.             break ;
  128.            case SB_BOTTOM :
  129.             nHScrollInc = nHScrollMax-nHScrollPos ;
  130.             break ;
  131.            case SB_LINEUP :
  132.             nHScrollInc = -1 ;
  133.             break ;
  134.            case SB_LINEDOWN :
  135.             nHScrollInc = 1 ;
  136.             break ;
  137.            case SB_PAGEUP :
  138.             nHScrollInc = min(-1,-cxClient/cxChar) ;
  139.             break ;
  140.            case SB_PAGEDOWN :
  141.             nHScrollInc = max(1,cxClient/cxChar) ;
  142.             break ;
  143.            case SB_THUMBTRACK :
  144.             nHScrollInc = LOWORD(lParam)-nHScrollPos ;
  145.             break ;
  146.            default :
  147.             nHScrollInc = 0 ;
  148.             break ;
  149.          }
  150.        nHScrollInc =  min(nHScrollInc , nHScrollMax-nHScrollPos) ;
  151.        nHScrollInc =  max(nHScrollInc , -nHScrollPos) ;
  152.        if (nHScrollInc)
  153.           { nHScrollPos += nHScrollInc ;
  154.         ScrollWindow(hwnd, -cxChar*nHScrollInc, 0, NULL, NULL) ;
  155.         SetScrollPos(hwnd, SB_HORZ, nHScrollPos, TRUE) ;
  156.         UpdateWindow(hwnd) ;
  157.           }
  158.        break ;
  159.       case WM_PAINT :
  160.        hdc = BeginPaint(hwnd, &ps) ;
  161.        nBeginLine = max(0,nVScrollPos + ps.rcPaint.top/cyChar - 1) ;
  162.        nEndLine = min(NUMLINE,nVScrollPos + ps.rcPaint.bottom/cyChar) ;
  163.        for (i=nBeginLine ; i<nEndLine ; i++)
  164.          { x = cxChar * (1-nHScrollPos) ;
  165.            y = cyChar * (1-nVScrollPos+i) ;
  166.            TextOut(hdc, x, y,
  167.                WinStruct[i].szStruct,
  168.                lstrlen(WinStruct[i].szStruct)) ;
  169.            TextOut(hdc, x+20*cxCaps, y,
  170.                WinStruct[i].szDescriptor,
  171.                lstrlen(WinStruct[i].szDescriptor)) ;
  172.          }
  173.        EndPaint(hwnd, &ps) ;
  174.        break ;
  175.       case WM_DESTROY :
  176.        PostQuitMessage(0) ;
  177.        break ;
  178.       default :
  179.        return DefWindowProc(hwnd, message, wParam, lParam) ;
  180.     }
  181.   return 0 ;
  182. long MainWindow::AppWndProc(WORD message, WORD wParam, LONG lParam)
  183. SetScrollPos(hwnd, SB_VERT, nVScrollPos, TRUE) ;
  184. #pragma hdrfile "windows.sym"
  185. #include <windows.h>
  186. #pragma hdrstop
  187. #include"winapp-2.h"
  188. VScroll.Set(SB_VERT) ;
  189.   HScroll.Set(SB_HORZ) ;
  190. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  191. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  192. #define max(a,b)            (((a) > (b)) ? (a) : (b))
  193. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  194. #define max(a,b)            (((a) > (b)) ? (a) : (b))
  195. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  196. #define max(a,b)            (((a) > (b)) ? (a) : (b))
  197. ////////// Base Class -> Window
  198. //////////
  199. class Window
  200. { protected:
  201.     HWND hwnd ;
  202.   public:
  203.     HWND GetHandle(void)     // get the window handle in the class
  204.     { return hwnd ; }
  205.     BOOL Show(int nCmdShow)
  206.     { return ShowWindow(hwnd,nCmdShow) ; }
  207.     void Update(void)
  208.     { UpdateWindow(hwnd) ; }
  209.     virtual long AppWndProc(WORD message, WORD wParam, LONG lParam) = 0 ;
  210. ////////// Derived Class -> MainWindow
  211. //////////
  212. class MainWindow : public Window
  213. { private:
  214.     static char szAppName[8] ;
  215.   public :
  216.     static void Register(void) ;
  217.     MainWindow(void) ;
  218.     long AppWndProc(WORD message, WORD wParam, LONG lParam) ;
  219.  hdc = GetDC(hwnd) ;
  220.        GetTextMetrics(hdc,&tm) ;
  221.        cxChar = tm.tmAveCharWidth ;
  222.        cyChar = tm.tmHeight + tm.tmExternalLeading ;
  223.        cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) *cxChar / 2 ;
  224.        ReleaseDC(hwnd,hdc) ;
  225. hAccel = LoadAccelerators(hInstance, szAccelName) ;
  226.