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

  1. /*
  2.  *
  3.  * GetTextExtent
  4.  *
  5.  * This program registers a window and creates it on the screen.  The
  6.  *  program then creates the window, shows the window, and then updates
  7.  *  the window.  If the user couble clicks the right mouse button, the
  8.  *  GetTextExtent function is executed with the HDC of the top level
  9.  *  window and the text "Test Text.".  The extents are returned in a
  10.  *  message box.
  11.  *
  12.  */
  13.  
  14. #include "windows.h"
  15.  
  16. /* Global Variables */
  17. static HANDLE hInst;         /* Handle to the Instance.            */
  18. static HWND hWnd;            /* Handle to the Window.              */
  19. static LPSTR lpTesttxt;      /* Long Pointer to Test Text String.  */
  20.  
  21. /* FORWARD REFERENCES */
  22. long FAR PASCAL WindowProc (HWND, unsigned, WORD, LONG);
  23.  
  24. /* WINMAIN */
  25. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  26. HANDLE hInstance, hPrevInstance;
  27. LPSTR lpszCmdLine;
  28. int cmdShow;
  29. {
  30.   MSG msg;
  31.  
  32.   lpTesttxt = (LPSTR)"Test Text.";
  33.   
  34.   if (!hPrevInstance)  {
  35.  
  36.      WNDCLASS rClass;
  37.  
  38.      rClass.lpszClassName = (LPSTR)"gtxtext";
  39.      rClass.hInstance      = hInstance;
  40.      rClass.lpfnWndProc   = WindowProc;
  41.      rClass.hCursor         = LoadCursor(NULL, IDC_ARROW);
  42.      rClass.hIcon          = LoadIcon(hInstance, IDI_APPLICATION);
  43.      rClass.lpszMenuName  = (LPSTR)NULL;
  44.      rClass.hbrBackground = GetStockObject(WHITE_BRUSH);
  45.      rClass.style            = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  46.      rClass.cbClsExtra      = 0;       /* Add double click capabilities. */
  47.      rClass.cbWndExtra      = 0;
  48.  
  49.      RegisterClass((LPWNDCLASS)&rClass);
  50.  
  51.      }
  52.    else
  53.       ;
  54.  
  55.    hInst = hInstance;
  56.  
  57.    hWnd = CreateWindow((LPSTR) "gtxtext",
  58.                (LPSTR) "GetTextExtent",        /* Create a window.         */
  59.                WS_OVERLAPPEDWINDOW,            /* Make it overlapped.      */
  60.                CW_USEDEFAULT,                  /* Use default coordinates. */
  61.                CW_USEDEFAULT,                  /* Use default coordinates. */
  62.                CW_USEDEFAULT,                  /* Use default coordinates. */
  63.                CW_USEDEFAULT,                  /* Use default coordinates. */
  64.                (HWND)NULL,
  65.                (HMENU)NULL,
  66.                (HANDLE)hInstance,
  67.                (LPSTR)NULL
  68.              );
  69.  
  70.    ShowWindow(hWnd, cmdShow);
  71.  
  72.    UpdateWindow(hWnd);
  73.  
  74.    while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
  75.        TranslateMessage(&msg);
  76.        DispatchMessage(&msg);
  77.    }
  78.  
  79.    exit(msg.wParam);
  80.  
  81. } /* WinMain */
  82.  
  83. /* WINDOWPROC */
  84.  
  85. long FAR PASCAL WindowProc(hWnd, identifier, wParam, lParam)
  86. HWND    hWnd;
  87. unsigned identifier;
  88. WORD     wParam;
  89. LONG     lParam;
  90.  
  91. {
  92.    switch (identifier) {
  93.  
  94.      case WM_PAINT: {
  95.  
  96.            PAINTSTRUCT ps;
  97.           RECT        rRect;
  98.          HDC        hDC;
  99.  
  100.          hDC=BeginPaint(hWnd, (LPPAINTSTRUCT)&ps);
  101.          SetMapMode(hDC, MM_ANISOTROPIC);
  102.          SetWindowOrg(hDC, 0, 0);
  103.          SetWindowExt(hDC, 110, 110);
  104.          GetClientRect(hWnd, (LPRECT)&rRect);
  105.          SetViewportOrg(hDC, 0, 0);
  106.          SetViewportExt(hDC, rRect.right, rRect.bottom);
  107.          DrawText(hDC,
  108.                 (LPSTR)"Double Click Right Mouse Button To Conduct Test.",
  109.                 48, (LPRECT)&rRect, DT_SINGLELINE);  /* Prompt text.    */
  110.          SetWindowExt(hDC, 110, 110);
  111.          GetClientRect(hWnd, (LPRECT)&rRect);
  112.          SetViewportOrg(hDC, 275, 75);
  113.          SetViewportExt(hDC, rRect.right, rRect.bottom);
  114.          DrawText(hDC, lpTesttxt, 10,
  115.                  (LPRECT)&rRect, DT_SINGLELINE);     /* Test Text.      */
  116.          EndPaint(hWnd, (LPPAINTSTRUCT)&ps);          
  117.  
  118.       }
  119.         break;
  120.     
  121.      case WM_RBUTTONDBLCLK:                    /* If the user double   */
  122.        {                                       /* clicks on the right  */
  123.        char szbuf[80];   /* Output buffer.      | mouse button, then   */
  124.        DWORD dwTxtExts;  /* Extents - test text.| establish needed     */
  125.                                                /* variables and call   */
  126.        HDC hDC; /* Display Context Handle. */
  127.  
  128.        hDC = GetDC(hWnd);                      /* (after getting DC)   */
  129.        dwTxtExts = GetTextExtent(hDC,
  130.                                  lpTesttxt, 10); /* the GetTextExtent  */
  131.         sprintf(szbuf,                          /* function.  Capture   */
  132.           "%s%i%s%i%s\0",                      /* the Ext information  */
  133.           "The Text Extents are (",            /* in a zero terminated */
  134.            (int)HIWORD(dwTxtExts), ",",         /* buffer.             */   
  135.           (int)LOWORD(dwTxtExts), ")."); 
  136.         MessageBox(hWnd,                        /* Output the buffer in */
  137.                   (LPSTR)szbuf,                /* a message box format */
  138.                   (LPSTR)"GetTextExtent",      /* so that the user can */
  139.                    MB_OK);                      /* have a readable and  */
  140.        }                                       /* useful format.       */
  141.        break;
  142.  
  143.      case WM_CLOSE: {
  144.  
  145.           DestroyWindow(hWnd);
  146.        }
  147.          break;
  148.     
  149.     case WM_DESTROY:
  150.         PostQuitMessage(0);
  151.         break;
  152.  
  153.     default:
  154.         return(DefWindowProc(hWnd, identifier, wParam, lParam));
  155.         break;
  156.  
  157.    }
  158.  
  159.    return(0L);
  160.  
  161. }
  162.