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

  1. /*
  2.  *
  3.  *   Function (s) demonstrated in this program:
  4.  *        AdjustWindowRect ()
  5.  *
  6.  *   Compiler version:
  7.  *        Microsoft C 5.1
  8.  *
  9.  *   Description:
  10.  *        This function demonstrates the use of the AdjustWindowRect function.
  11.  *        It will compute the required size of the window rectangle based on
  12.  *        the desired client-rectangle size.  The window rectangle will then be
  13.  *        passed to the CreateWindow function to create a Window whose client
  14.  *        area is the desired size.
  15.  *
  16.  *
  17.  */
  18.  
  19. #include <windows.h>
  20.  
  21. BOOL FAR PASCAL InitCreateWindow (HANDLE, HANDLE, int);
  22. long    FAR PASCAL CreateWindowProc (HANDLE, unsigned, WORD, LONG);
  23.  
  24. int    PASCAL WinMain  (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  25. HANDLE    hInstance, hPrevInstance;
  26. LPSTR     lpszCmdLine;
  27. int    nCmdShow;
  28. {
  29.   MSG msg;
  30.  
  31.   InitCreateWindow (hInstance, hPrevInstance, nCmdShow);
  32.  
  33.   while (GetMessage ( (LPMSG) & msg, NULL, 0, 0))
  34.   {
  35.     TranslateMessage ( (LPMSG) & msg);
  36.     DispatchMessage ( (LPMSG) & msg);
  37.   }
  38.   exit (msg.wParam);
  39. }
  40.  
  41.  
  42. BOOL FAR PASCAL InitCreateWindow (hInstance, hPrevInstance, cmdShow)
  43. HANDLE   hInstance;
  44. HANDLE   hPrevInstance;
  45. int    cmdShow;
  46. {
  47.   WNDCLASS  wcCreateWindowClass;
  48.   HWND  hWnd;
  49.  
  50.   wcCreateWindowClass.lpszClassName = (LPSTR) "CreateWindow";
  51.   wcCreateWindowClass.hInstance     = hInstance;
  52.   wcCreateWindowClass.lpfnWndProc   = CreateWindowProc;
  53.   wcCreateWindowClass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  54.   wcCreateWindowClass.hIcon         = NULL;
  55.   wcCreateWindowClass.lpszMenuName  = (LPSTR) NULL;
  56.   wcCreateWindowClass.hbrBackground = GetStockObject (BLACK_BRUSH);
  57.   wcCreateWindowClass.style         = CS_HREDRAW | CS_VREDRAW;
  58.   wcCreateWindowClass.cbClsExtra    = 0;
  59.   wcCreateWindowClass.cbWndExtra    = 0;
  60.  
  61.   RegisterClass ( (LPWNDCLASS) & wcCreateWindowClass);
  62.  
  63.   hWnd = CreateWindow ( (LPSTR) "CreateWindow", (LPSTR) "AdjustWindowRect",
  64.       WS_OVERLAPPEDWINDOW,
  65.       CW_USEDEFAULT, 0,
  66.       CW_USEDEFAULT, 0,
  67.       NULL, NULL, hInstance, NULL);
  68.  
  69.   ShowWindow (hWnd, cmdShow);         /* Display this window on the screen  */
  70.   UpdateWindow (hWnd);                              /* Cause a paint message */
  71.  
  72.   return TRUE;
  73. }
  74.  
  75.  
  76. long    FAR PASCAL CreateWindowProc (hWnd, message, wParam, lParam)
  77. HWND        hWnd;
  78. unsigned    message;
  79. WORD        wParam;
  80. LONG        lParam;
  81. {
  82.   switch (message)
  83.   {
  84.   case WM_PAINT:
  85.     PaintCreate (hWnd);
  86.     break;
  87.  
  88.   case WM_DESTROY:
  89.     PostQuitMessage (0);
  90.     break;
  91.  
  92.   default:
  93.     return (DefWindowProc (hWnd, message, wParam, lParam));
  94.     break;
  95.   }
  96.   return (0L);
  97. }
  98.  
  99.  
  100. PaintCreate (hWnd)  /*  The Paint Procedure  */
  101. HWND    hWnd;
  102. {
  103.   PAINTSTRUCT  ps;
  104.   HDC          hDC;
  105.   BOOL         bMenu;
  106.   long    lStyle;
  107.   HANDLE       hOldBrush, hBrush;
  108.   RECT         lpRect;
  109.  
  110.   BeginPaint (hWnd, (LPPAINTSTRUCT) & ps);
  111.  
  112.   hDC = ps.hdc;                                  /* Get the Display Context  */
  113.   lStyle = WS_TILED;
  114.   bMenu = 0;
  115.   hBrush         = GetStockObject (BLACK_BRUSH);  /* Get a Black brush     */
  116.   hOldBrush      = SelectObject (hDC, hBrush);   /* Select the new brush  */
  117.  
  118.   SetMapMode (hDC, MM_ANISOTROPIC);              /* Set the mapping mode  */
  119.   SetWindowExt (hDC, 200, 200);           /* Set Extent of viewing area. */
  120.   GetClientRect (hWnd, (LPRECT) & lpRect);     /* Get size of client area. */
  121.   SetViewportExt (hDC, lpRect.right, lpRect.bottom); /* Set extent of viewport */
  122.   AdjustWindowRect (&lpRect, lStyle, bMenu);
  123.   TextOut (hDC, 10, 10,
  124.       (LPSTR)"Smallest rectangle that will encompass the entire Window.",
  125.       strlen ("Smallest rectangle that will encompass the entire Window."));
  126.  
  127.   ValidateRect (hWnd, (LPRECT) NULL);   /* Disable any more paint messages  */
  128.   EndPaint (hWnd, (LPPAINTSTRUCT) & ps);
  129.  
  130.   SelectObject (hDC, hOldBrush);                /*  Replace the old brush  */
  131.  
  132.   return TRUE;
  133. }
  134.  
  135.  
  136.