DEMO2_2.C
上传用户:cncajx
上传日期:2007-01-03
资源大小:190k
文件大小:5k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1.   1 /****************************************************************/
  2.   2 /*         Demo2_2   ---  The Use of SaveDC                     */
  3.   3 /****************************************************************/
  4.   4 
  5.   5 #include <windows.h>
  6.   6 #include "demo2_2.h"
  7.   7 
  8.   8 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
  9.   9 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
  10.  10 
  11.  11 void ShowFont(HDC, int, int, int);
  12.  12 
  13.  13 
  14.  14 /****************************************************************/
  15.  15 /*                      WinMain()                               */
  16.  16 /****************************************************************/
  17.  17 
  18.  18 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  19.  19                    LPSTR lpszCmdLine, int nCmdShow)
  20.  20 {
  21.  21    WNDCLASS wclass;
  22.  22    MSG      msg;
  23.  23    HWND     hWnd;
  24.  24    char     szName[] = "Demo2_2";
  25.  25 
  26.  26    if (!hPrevInstance)
  27.  27     {
  28.  28         wclass.style         = NULL;
  29.  29         wclass.lpfnWndProc   = MainWndProc;
  30.  30         wclass.cbClsExtra    = 0;
  31.  31         wclass.cbWndExtra    = 0;
  32.  32         wclass.hInstance     = hInstance;
  33.  33         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  34.  34         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  35.  35         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
  36.  36         wclass.lpszMenuName  = szName;
  37.  37         wclass.lpszClassName = szName;
  38.  38 
  39.  39         if (!RegisterClass (&wclass))
  40.  40            return (FALSE);
  41.  41     }
  42.  42 
  43.  43     hWnd = CreateWindow(
  44.  44                 szName,
  45.  45                 "The SaveDC" ,
  46.  46                 WS_OVERLAPPEDWINDOW,
  47.  47                 CW_USEDEFAULT,
  48.  48                 CW_USEDEFAULT,
  49.  49                 CW_USEDEFAULT,
  50.  50                 CW_USEDEFAULT,
  51.  51                 NULL,
  52.  52                 NULL,
  53.  53                 hInstance,
  54.  54                 NULL );
  55.  55 
  56.  56     if (!hWnd)
  57.  57         return (FALSE);
  58.  58 
  59.  59     ShowWindow(hWnd, nCmdShow);
  60.  60     UpdateWindow(hWnd);
  61.  61 
  62.  62     while (GetMessage(&msg, NULL, NULL,NULL))
  63.  63        {
  64.  64            TranslateMessage(&msg);
  65.  65            DispatchMessage(&msg);
  66.  66        }
  67.  67     return (msg.wParam);
  68.  68 }
  69.  69 
  70.  70 
  71.  71 
  72.  72 /****************************************************************/
  73.  73 /*                      MainWndProc()                           */
  74.  74 /****************************************************************/
  75.  75 
  76.  76 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
  77.  77                             WORD wParam, LONG lParam)
  78.  78 {
  79.  79    HDC           hDC;
  80.  80    PAINTSTRUCT   ps;
  81.  81    TEXTMETRIC    tm;
  82.  82    HFONT         hFont;
  83.  83    char          szString[50];
  84.  84 
  85.  85    switch (message)
  86.  86     {
  87.  87       case WM_COMMAND :
  88.  88                 switch (wParam)
  89.  89                   {
  90.  90                     case IDM_EXIT :
  91.  91                          DestroyWindow(hWnd);
  92.  92                          break;
  93.  93                   }
  94.  94                 return (0);
  95.  95 
  96.  96       case WM_PAINT :
  97.  97                 hDC = BeginPaint(hWnd, &ps);
  98.  98 
  99.  99                 hFont = GetStockObject(SYSTEM_FIXED_FONT);
  100. 100                 SelectObject(hDC, hFont);
  101. 101 
  102. 102 
  103. 103                 sprintf(szString, "This is the No.1 font :");
  104. 104                 TextOut(hDC, 10, 10, szString,
  105. 105                                      strlen(szString));
  106. 106                 ShowFont(hDC, 10, 30, ANSI_FIXED_FONT);
  107. 107 
  108. 108 
  109. 109                 sprintf(szString, "This is the No.2 font :");
  110. 110                 TextOut(hDC, 10, 100, szString,
  111. 111                                      strlen(szString));
  112. 112                 ShowFont(hDC, 10, 120, ANSI_VAR_FONT);
  113. 113 
  114. 114 
  115. 115                 sprintf(szString, "End of the show");
  116. 116                 TextOut(hDC, 10, 190, szString,
  117. 117                                      strlen(szString));
  118. 118 
  119. 119                 EndPaint(hWnd, &ps);
  120. 120                 return (0);
  121. 121 
  122. 122       case WM_DESTROY :
  123. 123                 PostQuitMessage(0);
  124. 124                 return (0);
  125. 125 
  126. 126       default :
  127. 127                 return(DefWindowProc(hWnd, message, wParam, lParam));
  128. 128     }
  129. 129 }
  130. 130 
  131. 131 
  132. 132 void ShowFont(HDC hDC, int x, int y, int nIndex)
  133. 133 {
  134. 134    HFONT  hFont;
  135. 135    char   szString[20];
  136. 136 
  137. 137    SaveDC(hDC);
  138. 138 
  139. 139    switch (nIndex)
  140. 140      {
  141. 141        case ANSI_FIXED_FONT :
  142. 142 
  143. 143                 hFont = GetStockObject(nIndex);
  144. 144                 SelectObject(hDC, hFont);
  145. 145 
  146. 146                 sprintf(szString, " ANSI_FIXED_FONT :");
  147. 147                 TextOut(hDC, x, y, szString,
  148. 148                                      strlen(szString));
  149. 149                 TextOut(hDC, x, y+20, "   abcdefghijklm", 13);
  150. 150 
  151. 151                 break;
  152. 152 
  153. 153        case ANSI_VAR_FONT:
  154. 154 
  155. 155                 hFont = GetStockObject(nIndex);
  156. 156                 SelectObject(hDC, hFont);
  157. 157 
  158. 158                 sprintf(szString, " ANSI_VAR_FONT :");
  159. 159                 TextOut(hDC, x, y, szString,
  160. 160                                      strlen(szString));
  161. 161                 TextOut(hDC, x, y+20, "   abcdefghijklm", 13);
  162. 162 
  163. 163                 break;
  164. 164       }
  165. 165 
  166. 166    RestoreDC(hDC, -1);
  167. 167 }