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

  1. /*
  2.  *  Function Name:   EnumFonts
  3.  *  Program Name:    enfonts.c
  4.  *  SDK Version:         2.03
  5.  *  Runtime Version:     2.03
  6.  *  Microsoft C Version: 5.1
  7.  *
  8.  *  Description:
  9.  *   This program will enumerate one font for each available typeface.
  10.  *   The alphabet of each font will be displayed.
  11.  */
  12.  
  13. #include "windows.h"
  14. #include "stdio.h"
  15. #include "string.h"
  16.  
  17. long FAR PASCAL WndProc(HWND, unsigned, WORD, LONG);
  18.  
  19. HWND   hWndMain;            /*  need global handle to window   */
  20. HANDLE hInst;
  21.  
  22. /************************************************************************/
  23.  
  24. short FAR PASCAL EnumProc(lpLogFont, lpTextMetric, FontType, lpData)
  25. LPLOGFONT lpLogFont;
  26. LPTEXTMETRIC lpTextMetric;
  27. short FontType;
  28. LPSTR lpData;
  29. {
  30.      HFONT hnewFont, holdFont;
  31.      HDC   theDC;
  32.      char  messageStr[256];
  33.      static int row=10;
  34.  
  35.   theDC = GetDC(hWndMain);
  36.   hnewFont = CreateFontIndirect(lpLogFont);
  37.   holdFont = SelectObject(theDC,hnewFont);       /* load new font  */
  38.   GetTextFace(theDC, 100, (LPSTR)messageStr);
  39.   sprintf (messageStr + strlen(messageStr), " Height: %d Width %d",
  40.            lpLogFont->lfHeight, lpLogFont->lfWidth);
  41.   TextOut(theDC,10,row,(LPSTR) messageStr, strlen(messageStr));
  42.   row += lpLogFont->lfHeight;             /*  advance line   */
  43.   DeleteObject(holdFont);
  44.   ReleaseDC(hWndMain, theDC);
  45.  
  46.   return (1);                    /* return value is user defined  */
  47. }
  48.  
  49. /***********************************************************************/
  50.  
  51. void CALL_EnumFonts(hDC)
  52. HDC hDC;
  53. {
  54.   FARPROC lpprocEnumFonts;
  55.  
  56.     lpprocEnumFonts = MakeProcInstance ((FARPROC) EnumProc, hInst);
  57.     EnumFonts (hDC, (LPSTR)NULL, lpprocEnumFonts, 0L);
  58.     FreeProcInstance ((FARPROC) lpprocEnumFonts);
  59.  
  60.   return;
  61. }
  62.  
  63. /**************************************************************************/
  64.  
  65. /* Procedure called when the application is loaded for the first time */
  66. BOOL WinInit( hInstance )
  67. HANDLE hInstance;
  68. {
  69.     WNDCLASS   wcClass;
  70.  
  71.     wcClass.style          = CS_HREDRAW | CS_VREDRAW;
  72.     wcClass.lpfnWndProc    = WndProc;
  73.     wcClass.cbClsExtra     =0;
  74.     wcClass.cbWndExtra     =0;
  75.     wcClass.hInstance      = hInstance;
  76.     wcClass.hIcon          = LoadIcon( hInstance,NULL );
  77.     wcClass.hCursor        = LoadCursor( NULL, IDC_ARROW );
  78.     wcClass.hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  79.     wcClass.lpszMenuName   = (LPSTR)NULL;
  80.     wcClass.lpszClassName  = (LPSTR)"EnumFonts";
  81.  
  82.     if (!RegisterClass( (LPWNDCLASS)&wcClass ) )
  83.         /* Initialization failed.
  84.          * Windows will automatically deallocate all allocated memory.
  85.          */
  86.         return FALSE;
  87.  
  88.     return TRUE;        /* Initialization succeeded */
  89. }
  90.  
  91.  
  92. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  93. HANDLE hInstance, hPrevInstance;
  94. LPSTR lpszCmdLine;
  95. int cmdShow;
  96. {
  97.     MSG   msg;
  98.     HWND  hWnd;
  99.  
  100.     if (!hPrevInstance)
  101.         {
  102.         /* Call initialization procedure if this is the first instance */
  103.         if (!WinInit( hInstance ))
  104.             return FALSE;
  105.         }
  106.  
  107.     hWnd = CreateWindow((LPSTR)"EnumFonts",
  108.                         (LPSTR)"EnumFonts()",
  109.                         WS_OVERLAPPEDWINDOW | WS_VSCROLL,
  110.                         CW_USEDEFAULT,
  111.                         CW_USEDEFAULT,
  112.                         CW_USEDEFAULT,
  113.                         CW_USEDEFAULT,
  114.                         (HWND)NULL,        /* no parent */
  115.                         (HMENU)NULL,       /* use class menu */
  116.                         (HANDLE)hInstance, /* handle to window instance */
  117.                         (LPSTR)NULL        /* no params to pass on */
  118.                         );
  119.  
  120.     hWndMain = hWnd;
  121.     hInst = hInstance;
  122.  
  123.     /* Make window visible according to the way the app is activated */
  124.     ShowWindow( hWnd, cmdShow );
  125.     UpdateWindow( hWnd );
  126.  
  127.     /* Polling messages from event queue */
  128.     while (GetMessage((LPMSG)&msg, NULL, 0, 0))
  129.         {
  130.         TranslateMessage((LPMSG)&msg);
  131.         DispatchMessage((LPMSG)&msg);
  132.         }
  133.  
  134.     return (int)msg.wParam;
  135. }
  136.  
  137. /* Procedures which make up the window class. */
  138. long FAR PASCAL WndProc( hWnd, message, wParam, lParam )
  139. HWND hWnd;
  140. unsigned message;
  141. WORD wParam;
  142. LONG lParam;
  143. {
  144.     PAINTSTRUCT ps;
  145.  
  146.     switch (message)
  147.     {
  148.  
  149.     case WM_PAINT:
  150.         BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
  151.         CALL_EnumFonts(ps.hdc);
  152.         EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
  153.         break;
  154.  
  155.     case WM_DESTROY:
  156.         PostQuitMessage( 0 );
  157.         break;
  158.  
  159.     default:
  160.         return DefWindowProc( hWnd, message, wParam, lParam );
  161.         break;
  162.     }
  163.     return(0L);
  164. }
  165.