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

  1. /*
  2.  *  Function Name:   CreatePenIndirect
  3.  *
  4.  *  Description:
  5.  *   This program creates a logical pen that replaces the current pen for the
  6.  *   device.  It uses the data structure LOGPEN to set up the style, width,
  7.  *   and color fields.  With lopnWidth, the data structure is type POINT.
  8.  *   The x value is the width, and the y value is ignored.  Unlike CreatePen,
  9.  *   the structure for LOGOPEN must first be allocated before values can be
  10.  *   assigned.
  11.  */
  12.  
  13. #include "windows.h"
  14.  
  15. long    FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
  16.  
  17. HPEN hPen, hOldPen;   /*  Global Handles to Pens  */
  18.  
  19. /***********************************************************************/
  20. void CALL_CreatePenIndirect (hWnd)
  21. HWND hWnd;
  22.   {
  23.   LOGPEN PenIndirect;
  24.   POINT Point1;
  25.  
  26.   Point1.x = 10;                      /* assign width 10 to x.          */
  27.   Point1.y = 0;                       /* y is ignored.                  */
  28.   PenIndirect.lopnStyle = 0;         /* style is 0                    */
  29.   PenIndirect.lopnWidth = Point1;      /* width is Point1.         */
  30.   PenIndirect.lopnColor = RGB (255, 0, 0);       /* color is red.   */
  31.  
  32.   hPen = CreatePenIndirect ( (LPLOGPEN) & PenIndirect);  /*  pen created  */
  33.  
  34.   if (hPen == NULL)                /* checks for successful pen creation */
  35.     {
  36.     MessageBox (hWnd, (LPSTR)"CreatePenIndirect failed",
  37.                 (LPSTR)"ERROR", MB_ICONHAND | MB_OK);
  38.     DestroyWindow (hWnd);  /*  The pen wasn't created, so trash the program  */
  39.     return;
  40.     }
  41.   return;
  42.   }
  43.  
  44.  
  45. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  46. HANDLE hInstance, hPrevInstance;
  47. LPSTR lpszCmdLine;
  48. int    cmdShow;
  49.   {
  50.   MSG   msg;
  51.   HWND  hWnd;
  52.   HMENU hMenu;
  53.  
  54.   if (!hPrevInstance)
  55.     {
  56.     WNDCLASS   wcClass;
  57.  
  58.     wcClass.style          = CS_HREDRAW | CS_VREDRAW;
  59.     wcClass.lpfnWndProc    = WndProc;
  60.     wcClass.cbClsExtra     = 0;
  61.     wcClass.cbWndExtra     = 0;
  62.     wcClass.hInstance      = hInstance;
  63.     wcClass.hIcon          = LoadIcon (hInstance, NULL);
  64.     wcClass.hCursor        = LoadCursor (NULL, IDC_ARROW);
  65.     wcClass.hbrBackground  = (HBRUSH)GetStockObject (WHITE_BRUSH);
  66.     wcClass.lpszMenuName   = (LPSTR)NULL;
  67.     wcClass.lpszClassName  = (LPSTR)"CreatePenIndirect";
  68.  
  69.     if (!RegisterClass ( (LPWNDCLASS) & wcClass))
  70.       return FALSE;
  71.     }
  72.  
  73.   hWnd = CreateWindow ( (LPSTR)"CreatePenIndirect",
  74.                       (LPSTR)"CreatePenIndirect ()",
  75.                       WS_OVERLAPPEDWINDOW,
  76.                       CW_USEDEFAULT,
  77.                       CW_USEDEFAULT,
  78.                       CW_USEDEFAULT,
  79.                       CW_USEDEFAULT,
  80.                       (HWND)NULL,        /* no parent */
  81.                       (HMENU)NULL,       /* use class menu */
  82.                       (HANDLE)hInstance, /* handle to window instance */
  83.                       (LPSTR)NULL);        /* no params to pass on */
  84.  
  85.   ShowWindow (hWnd, cmdShow);
  86.   UpdateWindow (hWnd);
  87.  
  88.   while (GetMessage ( (LPMSG) & msg, NULL, 0, 0))
  89.     {
  90.     TranslateMessage ( (LPMSG) & msg);
  91.     DispatchMessage ( (LPMSG) & msg);
  92.     }
  93.   return (int)msg.wParam;
  94.   }
  95.  
  96. /* Procedures which make up the window class. */
  97. long    FAR PASCAL WndProc (hWnd, message, wParam, lParam)
  98. HWND     hWnd;
  99. unsigned message;
  100. WORD     wParam;
  101. LONG     lParam;
  102.   {
  103.   PAINTSTRUCT ps;
  104.  
  105.   switch (message)
  106.     {
  107.     case WM_CREATE:
  108.       CALL_CreatePenIndirect (hWnd);
  109.       break;
  110.  
  111.     case WM_PAINT:
  112.       BeginPaint (hWnd, (LPPAINTSTRUCT) & ps);
  113.       hOldPen = SelectObject (ps.hdc, hPen);
  114.       Arc (ps.hdc, 0, 0, 300, 200, 200, 140, 100, 30);
  115.       SelectObject (ps.hdc, hOldPen);
  116.       ValidateRect (hWnd, (LPRECT) NULL);
  117.       EndPaint (hWnd, (LPPAINTSTRUCT) & ps);
  118.       break;
  119.  
  120.     case WM_DESTROY:
  121.       DeleteObject (hPen);
  122.       PostQuitMessage (0);
  123.       break;
  124.  
  125.     default:
  126.       return DefWindowProc (hWnd, message, wParam, lParam);
  127.       break;
  128.     }
  129.   return (0L);
  130.   }
  131.