home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c221 / 7.ddi / MWHC.007 / 94 < prev    next >
Encoding:
Text File  |  1991-10-23  |  3.7 KB  |  117 lines

  1. /*----------------------------------------
  2.    LINEDDA.C -- LineDDA Demonstration
  3.                 (c) Charles Petzold, 1990
  4.   ----------------------------------------*/
  5.  
  6. #include <windows.h>
  7.  
  8. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG) ;
  9. #ifdef ORIG
  10. void FAR PASCAL LineProc (short, short, LPSTR) ;
  11. #else
  12. void FAR PASCAL LineProc (int, int, LPSTR) ;
  13. #endif
  14.  
  15. HANDLE hInst ;
  16.  
  17. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  18.                     LPSTR lpszCmdLine, int nCmdShow)
  19.      {
  20.      static char szAppName[] = "LineDDA" ;
  21.      HWND        hwnd ;
  22.      MSG         msg ;
  23.      WNDCLASS    wndclass ;
  24.  
  25.      if (!hPrevInstance) 
  26.           {
  27.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  28.           wndclass.lpfnWndProc   = WndProc ;
  29.           wndclass.cbClsExtra    = 0 ;
  30.           wndclass.cbWndExtra    = 0 ;
  31.           wndclass.hInstance     = hInstance ;
  32.           wndclass.hIcon         = NULL ;
  33.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  34.           wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  35.           wndclass.lpszMenuName  = NULL ;
  36.           wndclass.lpszClassName = szAppName ;
  37.  
  38.           RegisterClass (&wndclass) ;
  39.           }
  40.  
  41.      hInst = hInstance ;
  42.  
  43.      hwnd = CreateWindow (szAppName, "LineDDA Demonstration",
  44.                           WS_OVERLAPPEDWINDOW,
  45.                           CW_USEDEFAULT, CW_USEDEFAULT,
  46.                           CW_USEDEFAULT, CW_USEDEFAULT,
  47.                           NULL, NULL, hInstance, NULL) ;
  48.  
  49.      ShowWindow (hwnd, nCmdShow) ;
  50.      UpdateWindow (hwnd) ;
  51.  
  52.      while (GetMessage (&msg, NULL, 0, 0))
  53.           {
  54.           TranslateMessage (&msg) ;
  55.           DispatchMessage (&msg) ;
  56.           }
  57.      return msg.wParam ;
  58.      }
  59.  
  60. long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
  61.      {
  62.      static FARPROC lpfnLineProc ;
  63.      static short   cxClient, cyClient, xL, xR, yT, yB ;
  64.      HDC            hdc ;
  65.      PAINTSTRUCT    ps ;
  66.  
  67.      switch (message)
  68.           {
  69.           case WM_CREATE:
  70.                lpfnLineProc = MakeProcInstance (LineProc, hInst) ;
  71.                return 0 ;
  72.  
  73.           case WM_SIZE:
  74.                xR = 3 * (xL = (cxClient = LOWORD (lParam)) / 4) ;
  75.                yB = 3 * (yT = (cyClient = HIWORD (lParam)) / 4) ;
  76.                return 0 ;
  77.  
  78.           case WM_PAINT:
  79.                hdc = BeginPaint (hwnd, &ps) ;
  80.  
  81.                LineDDA (xL, yT, xR, yT, lpfnLineProc, (LPSTR) &hdc) ;
  82.                LineDDA (xR, yT, xR, yB, lpfnLineProc, (LPSTR) &hdc) ;
  83.                LineDDA (xR, yB, xL, yB, lpfnLineProc, (LPSTR) &hdc) ;
  84.                LineDDA (xL, yB, xL, yT, lpfnLineProc, (LPSTR) &hdc) ;
  85.  
  86.                LineDDA (0,       0,       xL, yT, lpfnLineProc, (LPSTR) &hdc) ;
  87.                LineDDA (cxClient, 0,       xR, yT, lpfnLineProc, (LPSTR) &hdc) ;
  88.                LineDDA (cxClient, cyClient, xR, yB, lpfnLineProc, (LPSTR) &hdc) ;
  89.                LineDDA (0,       cyClient, xL, yB, lpfnLineProc, (LPSTR) &hdc) ;
  90.  
  91.                EndPaint (hwnd, &ps) ;
  92.                return 0 ;
  93.  
  94.           case WM_DESTROY:
  95.                PostQuitMessage (0) ;
  96.                return 0 ;
  97.           }
  98.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  99.      }
  100.  
  101. #ifdef ORIG
  102. void FAR PASCAL LineProc (short x, short y, LPSTR lpData)
  103. #else
  104. void FAR PASCAL LineProc (int x, int y, LPSTR lpData)
  105. #endif
  106.      {
  107.      static short nCounter = 0 ;
  108.  
  109.      if (nCounter == 2)
  110. #ifdef __HIGHC__
  111.           Ellipse (* (HDC lpFAR *) lpData, x - 2, y - 2, x + 3, y + 3) ;
  112. #else
  113.           Ellipse (* (HDC far *) lpData, x - 2, y - 2, x + 3, y + 3) ;
  114. #endif
  115.      nCounter = (nCounter + 1) % 4 ;
  116.      }
  117.