home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / graphics / lptodp.c < prev    next >
C/C++ Source or Header  |  1988-08-10  |  5KB  |  155 lines

  1. /*
  2.  *  Function Name:   CreatePolyRgn
  3.  *  Program Name:    crpolyrg.c
  4.  *
  5.  *  SDK Version:         2.03
  6.  *  Runtime Version:     2.03
  7.  *  Microsoft C Version: 5.1
  8.  *
  9.  *  Description:
  10.  *   The program below will set the map mode to MM_LOENGLISH, then
  11.  *   assign a POINT data structure the logical coordinates for making
  12.  *   a poloygon (triangle).  The POINT structure will then be converted
  13.  *   to device coordinates and displayed in MM_TEXT (device
  14.  *   coordinates) map mode.
  15.  */
  16.  
  17. #include "windows.h"
  18.  
  19. long FAR PASCAL WndProc(HWND, unsigned, WORD, LONG);
  20.  
  21. /***********************************************************************/
  22.  
  23. void CALL_LPtoDP(hWnd, hDC)
  24. HWND hWnd;
  25. HDC hDC;
  26. {
  27.   POINT Points[4];
  28.   BOOL    bConverted;
  29.  
  30.  
  31.   SetMapMode(hDC, MM_LOENGLISH);
  32.  
  33.   Points[0].x = 100;                        /* logical points */
  34.   Points[0].y = -300;                     /* in MM_LOENGLISH mode */
  35.   Points[1].x = 100;
  36.   Points[1].y = -200;
  37.   Points[2].x = 500;
  38.   Points[2].y = -300;
  39.   Points[3].x = 100;
  40.   Points[3].y = -300;
  41.                                           /* conversion to device points */
  42.   bConverted = LPtoDP(hDC, (LPPOINT)Points, 4);
  43.  
  44.   if (bConverted == FALSE)                   /* Check for error */
  45.     MessageBox(hWnd, (LPSTR)"LPtoDP failed.", (LPSTR)"ERROR", MB_ICONHAND);
  46.  
  47.   SetMapMode(hDC, MM_TEXT);    /* back to MM_TEXT - Points now in device  */
  48.   Polyline (hDC, (LPPOINT)Points, 4);               /* coordinates.       */
  49.   TextOut(hDC, 10, 10, (LPSTR)"Logical points converted in program", 35);
  50.  
  51.   return;
  52. }
  53.  
  54. /**************************************************************************/
  55.  
  56. /* Procedure called when the application is loaded for the first time */
  57. BOOL WinInit( hInstance )
  58. HANDLE hInstance;
  59. {
  60.     WNDCLASS   wcClass;
  61.  
  62.     wcClass.style          = CS_HREDRAW | CS_VREDRAW;
  63.     wcClass.lpfnWndProc    = WndProc;
  64.     wcClass.cbClsExtra     =0;
  65.     wcClass.cbWndExtra     =0;
  66.     wcClass.hInstance      = hInstance;
  67.     wcClass.hIcon          = LoadIcon( hInstance,NULL );
  68.     wcClass.hCursor        = LoadCursor( NULL, IDC_ARROW );
  69.     wcClass.hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  70.     wcClass.lpszMenuName   = (LPSTR)NULL;
  71.     wcClass.lpszClassName  = (LPSTR)"LPtoDP";
  72.  
  73.     if (!RegisterClass( (LPWNDCLASS)&wcClass ) )
  74.         /* Initialization failed.
  75.          * Windows will automatically deallocate all allocated memory.
  76.          */
  77.         return FALSE;
  78.  
  79.     return TRUE;        /* Initialization succeeded */
  80. }
  81.  
  82.  
  83. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  84. HANDLE hInstance, hPrevInstance;
  85. LPSTR lpszCmdLine;
  86. int cmdShow;
  87. {
  88.     MSG   msg;
  89.     HWND  hWnd;
  90.  
  91.     if (!hPrevInstance)
  92.         {
  93.         /* Call initialization procedure if this is the first instance */
  94.         if (!WinInit( hInstance ))
  95.             return FALSE;
  96.         }
  97.  
  98.     hWnd = CreateWindow((LPSTR)"LPtoDP",
  99.                         (LPSTR)"LPtoDP()",
  100.                         WS_OVERLAPPEDWINDOW,
  101.                         CW_USEDEFAULT,
  102.                         CW_USEDEFAULT,
  103.                         CW_USEDEFAULT,
  104.                         CW_USEDEFAULT,
  105.                         (HWND)NULL,        /* no parent */
  106.                         (HMENU)NULL,       /* use class menu */
  107.                         (HANDLE)hInstance, /* handle to window instance */
  108.                         (LPSTR)NULL        /* no params to pass on */
  109.                         );
  110.  
  111.     /* Make window visible according to the way the app is activated */
  112.     ShowWindow( hWnd, cmdShow );
  113.     UpdateWindow( hWnd );
  114.  
  115.     /* Polling messages from event queue */
  116.     while (GetMessage((LPMSG)&msg, NULL, 0, 0))
  117.         {
  118.         TranslateMessage((LPMSG)&msg);
  119.         DispatchMessage((LPMSG)&msg);
  120.         }
  121.  
  122.     return (int)msg.wParam;
  123. }
  124.  
  125. /* Procedures which make up the window class. */
  126. long FAR PASCAL WndProc( hWnd, message, wParam, lParam )
  127. HWND hWnd;
  128. unsigned message;
  129. WORD wParam;
  130. LONG lParam;
  131. {
  132.     PAINTSTRUCT ps;
  133.  
  134.     switch (message)
  135.     {
  136.  
  137.     case WM_PAINT:
  138.         BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
  139.         CALL_LPtoDP(hWnd, ps.hdc);
  140.         ValidateRect(hWnd, (LPRECT) NULL);
  141.         EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
  142.         break;
  143.  
  144.     case WM_DESTROY:
  145.         PostQuitMessage( 0 );
  146.         break;
  147.  
  148.     default:
  149.         return DefWindowProc( hWnd, message, wParam, lParam );
  150.         break;
  151.     }
  152.     return(0L);
  153. }
  154.  
  155.