home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / graphics / linedda.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  3.7 KB  |  147 lines

  1. /*
  2.  *   LineDDA
  3.  *
  4.  *   This program demonstrates the use of the LineDDA function. LineDDA
  5.  *   performs a function for every point on the line from X1,X2 to Y1,Y2.
  6.  *   LineDDA is called from Winmain in this sample application.
  7.  */
  8.  
  9. #include "windows.h"
  10.  
  11. HDC hDC;
  12.  
  13. long FAR PASCAL HelloWndProc(HWND, unsigned, WORD, LONG);
  14.  
  15. void FAR PASCAL DrawLine(int,int,LPSTR);
  16.  
  17.  
  18. /****************** procedure that LineDDA "calls" *********************/
  19.  
  20. void FAR PASCAL DrawLine(X,Y,lpData)
  21. int X;
  22. int Y;
  23. LPSTR lpData;
  24.  
  25. {
  26. switch (X % 3)
  27.     {
  28.     case 0:
  29.        MoveTo(hDC,X+30,Y-1);
  30.        LineTo(hDC,X-1,Y+11);
  31.        break;
  32.  
  33.     default:
  34.        break;
  35.     }
  36. return;
  37. }
  38.  
  39. /***********************************************************************/
  40.  
  41.  
  42. /* Procedure called when the application is loaded for the first time */
  43. BOOL HelloInit( hInstance )
  44. HANDLE hInstance;
  45. {
  46.     PWNDCLASS   pHelloClass;
  47.  
  48.     pHelloClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) );
  49.  
  50.     pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  51.     pHelloClass->hIcon        = LoadIcon( hInstance,NULL);
  52.     pHelloClass->lpszMenuName   = (LPSTR)NULL;
  53.     pHelloClass->lpszClassName    = (LPSTR)"Sample Application";
  54.     pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  55.     pHelloClass->hInstance      = hInstance;
  56.     pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  57.     pHelloClass->lpfnWndProc    = HelloWndProc;
  58.  
  59.     if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  60.         /* Initialization failed.
  61.          * Windows will automatically deallocate all allocated memory.
  62.          */
  63.         return FALSE;
  64.  
  65.     LocalFree( (HANDLE)pHelloClass );
  66.     return TRUE;        /* Initialization succeeded */
  67. }
  68.  
  69.  
  70. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  71. HANDLE hInstance, hPrevInstance;
  72. LPSTR lpszCmdLine;
  73. int cmdShow;
  74. {
  75.     MSG   msg;
  76.     HWND  hWnd;
  77.     HMENU hMenu;
  78.  
  79.     HelloInit( hInstance );
  80.     hWnd = CreateWindow((LPSTR)"Sample Application",
  81.             (LPSTR)"LineDDA",
  82.             WS_OVERLAPPEDWINDOW,
  83.             CW_USEDEFAULT,
  84.             CW_USEDEFAULT,
  85.             CW_USEDEFAULT,
  86.             CW_USEDEFAULT,
  87.                         (HWND)NULL,        /* no parent */
  88.                         (HMENU)NULL,       /* use class menu */
  89.                         (HANDLE)hInstance, /* handle to window instance */
  90.                         (LPSTR)NULL        /* no params to pass on */
  91.                         );
  92.  
  93.     /* Make window visible according to the way the app is activated */
  94.     ShowWindow( hWnd, cmdShow );
  95.     UpdateWindow( hWnd );
  96.  
  97.     hDC = GetDC(hWnd);
  98.  
  99. /************************    call LineDDA    **************************/
  100.  
  101.     LineDDA(0,0,200,200,(FARPROC)DrawLine,(LPSTR)NULL);
  102.  
  103. /**********************************************************************/
  104.  
  105.     ReleaseDC(hWnd,hDC);
  106.  
  107.     /* Polling messages from event queue */
  108.     while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
  109.         TranslateMessage((LPMSG)&msg);
  110.         DispatchMessage((LPMSG)&msg);
  111.         }
  112.  
  113.     return (int)msg.wParam;
  114. }
  115.  
  116.  
  117. /* Procedures which make up the window class. */
  118. long FAR PASCAL HelloWndProc( hWnd, message, wParam, lParam )
  119. HWND hWnd;
  120. unsigned message;
  121. WORD wParam;
  122. LONG lParam;
  123. {
  124.     PAINTSTRUCT ps;
  125.  
  126.     switch (message)
  127.     {
  128.     case WM_SYSCOMMAND:
  129.     return DefWindowProc( hWnd, message, wParam, lParam );
  130.         break;
  131.  
  132.     case WM_DESTROY:
  133.         PostQuitMessage( 0 );
  134.         break;
  135.  
  136.     case WM_PAINT:
  137.         BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
  138.         EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
  139.         break;
  140.  
  141.     default:
  142.         return DefWindowProc( hWnd, message, wParam, lParam );
  143.         break;
  144.     }
  145.     return(0L);
  146. }
  147.