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

  1. /*
  2.  *
  3.  *   Function (s) demonstrated in this program:
  4.  *        AnsiLower (LPSTR)
  5.  *        AnsiUpper (LPSTR)
  6.  *        AnsiToOem (LPSTR, LPSTR)
  7.  *        AnsiNext (LPSTR)
  8.  *        AnsiPrev (LPSTR, LPSTR)
  9.  *        OemToAnsi (LPSTR, LPSTR)
  10.  */
  11.  
  12. #include <windows.h>
  13. #include <stdio.h>
  14.  
  15. #define MAXSTRING 80
  16.  
  17. long    FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
  18.  
  19. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  20. HANDLE   hInstance, hPrevInstance;
  21. LPSTR    lpszCmdLine;
  22. int      cmdShow;
  23.   {
  24.   HWND      hWnd;
  25.   WNDCLASS  wndclass;
  26.   MSG       msg;
  27.  
  28.   if (!hPrevInstance)
  29.     {
  30.     wndclass.style         = CS_HREDRAW | CS_VREDRAW;
  31.     wndclass.lpfnWndProc   = WndProc;
  32.     wndclass.cbClsExtra    = 0;
  33.     wndclass.cbWndExtra    = 0;
  34.     wndclass.hInstance     = hInstance;
  35.     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
  36.     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  37.     wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
  38.     wndclass.lpszMenuName  = NULL;
  39.     wndclass.lpszClassName = "ANSI";
  40.  
  41.     if (!RegisterClass (&wndclass))
  42.       return FALSE;
  43.     }
  44.  
  45.   hWnd = CreateWindow ("ANSI",
  46.                       "Ansi Functions",
  47.                       WS_OVERLAPPEDWINDOW,
  48.                       CW_USEDEFAULT,
  49.                       0,
  50.                       CW_USEDEFAULT,
  51.                       0,
  52.                       NULL,
  53.                       NULL,
  54.                       hInstance,
  55.                       NULL);
  56.  
  57.   ShowWindow (hWnd, cmdShow);
  58.   UpdateWindow (hWnd);
  59.  
  60.   while (GetMessage (&msg, NULL, 0, 0))
  61.     {
  62.     TranslateMessage (&msg);
  63.     DispatchMessage (&msg);
  64.     }
  65.   return (msg.wParam);
  66.   }
  67.  
  68.  
  69. long    FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  70. HWND     hWnd;
  71. unsigned iMessage;
  72. WORD     wParam;
  73. LONG     lParam;
  74.   {
  75.   HDC         hDC;
  76.   HMENU       hMenu;
  77.   TEXTMETRIC  tm;
  78.   char    szAnsiBuff[MAXSTRING];
  79.   char    szOemBuff[MAXSTRING];
  80.  
  81.   switch (iMessage)
  82.     {
  83.     case WM_CREATE:
  84.       hMenu = CreateMenu ();
  85.       ChangeMenu (hMenu, NULL, (LPSTR)"Display", 100, MF_APPEND);
  86.       SetMenu (hWnd, hMenu);
  87.       break;
  88.  
  89.     case WM_INITMENU:
  90.       InvalidateRect (hWnd, NULL, TRUE);
  91.       break;
  92.  
  93.     case WM_COMMAND:
  94.       if (wParam == 100)
  95.         {
  96.         hDC = GetDC (hWnd);
  97.         GetTextMetrics (hDC, (LPTEXTMETRIC) & tm);
  98.         sprintf (szAnsiBuff, "A Sample String: aBcDwXyZ ⌐½«▓│║");
  99.         TextOut (hDC, 1, tm.tmHeight * 1, (LPSTR)"ANSI Character Set", 18);
  100.         TextOut (hDC, 1, tm.tmHeight * 2, (LPSTR)szAnsiBuff, 31);
  101.  
  102.         AnsiToOem ( (LPSTR)szAnsiBuff, (LPSTR)szOemBuff);
  103.         TextOut (hDC, 1, tm.tmHeight * 4,
  104.             (LPSTR)"ANSI Characters Converted to Nearest OEM Characters by AnsiToOem ()",
  105.             67);
  106.         TextOut (hDC, 1, tm.tmHeight * 5, (LPSTR)szOemBuff, 31);
  107.  
  108.         OemToAnsi ( (LPSTR)szOemBuff, (LPSTR)szAnsiBuff);
  109.         TextOut (hDC, 1, tm.tmHeight * 7,
  110.             (LPSTR)"OEM Characters Converted to Nearest ANSI Characters by OemToAnsi ()",
  111.             67);
  112.         TextOut (hDC, 1, tm.tmHeight * 8, (LPSTR)szAnsiBuff, 31);
  113.  
  114.   /* Convert original ANSI string to all lower case. */
  115.         TextOut (hDC, 1, tm.tmHeight * 10,
  116.             (LPSTR)"Original ANSI String Processed by AnsiLower ()", 46);
  117.         TextOut (hDC, 1, tm.tmHeight * 11, AnsiLower ( (LPSTR)szAnsiBuff), 31);
  118.  
  119.   /* Convert lower case ANSI string to all upper case. */
  120.         TextOut (hDC, 1, tm.tmHeight * 13,
  121.             (LPSTR)"Lower Case ANSI String Processed by AnsiUpper ()", 48);
  122.         TextOut (hDC, 1, tm.tmHeight * 14, AnsiUpper ( (LPSTR)szAnsiBuff), 31);
  123.  
  124.   /* Use AnsiNext () and AnsiPrev (). */
  125.         TextOut (hDC, 1, tm.tmHeight * 16,
  126.             (LPSTR)"Display String Starting at Next Char After Fifth Char Using AnsiNext ()",
  127.             71);
  128.         TextOut (hDC, 1, tm.tmHeight * 17, AnsiNext ( (LPSTR) & szAnsiBuff[4]),
  129.             26);
  130.  
  131.         TextOut (hDC, 1, tm.tmHeight * 19,
  132.             (LPSTR)"Display String Starting at Char Previous to Fifth Char Using AnsiPrev ()",
  133.             72);
  134.         TextOut (hDC, 1, tm.tmHeight * 20, AnsiPrev ( (LPSTR)szAnsiBuff,
  135.             (LPSTR) & szAnsiBuff[4]), 27);
  136.  
  137.         ReleaseDC (hWnd, hDC);
  138.         }
  139.       break;
  140.  
  141.     case WM_DESTROY:
  142.       PostQuitMessage (0);
  143.       break;
  144.  
  145.     default:
  146.       return DefWindowProc (hWnd, iMessage, wParam, lParam);
  147.     }
  148.   return (0L);
  149.   }
  150.