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

GDI/图象编程

开发平台:

Visual C++

  1.   1 /****************************************************************/
  2.   2 /*         Demo3_1   ---  Mapping Mode                          */
  3.   3 /****************************************************************/
  4.   4 
  5.   5 #include <windows.h>
  6.   6 #include "demo3_1.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 ShowMapModeDemo(HWND, HDC, 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[] = "Demo3_1";
  25.  25 
  26.  26    if (!hPrevInstance)
  27.  27     {
  28.  28         wclass.style         = CS_HREDRAW | CS_VREDRAW;
  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                 "Mapping Mode",
  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    PAINTSTRUCT   ps;
  80.  80    HDC           hDC;
  81.  81    HMENU         hMenu;
  82.  82    static int    MapModeID = IDM_TEXT;
  83.  83 
  84.  84    switch (message)
  85.  85     {
  86.  86         case WM_COMMAND :
  87.  87                 switch(wParam)
  88.  88                   {
  89.  89                     case IDM_TEXT  :
  90.  90                     case IDM_LOMET :
  91.  91                     case IDM_HIMET :
  92.  92                     case IDM_LOENG :
  93.  93                     case IDM_HIENG :
  94.  94                     case IDM_TWIPS :
  95.  95 
  96.  96                          if (MapModeID != wParam)
  97.  97                            {
  98.  98                              hMenu = GetMenu(hWnd);
  99.  99                              CheckMenuItem(hMenu, MapModeID,
  100. 100                                                   MF_UNCHECKED);
  101. 101                              MapModeID = wParam;
  102. 102                              CheckMenuItem(hMenu, wParam,
  103. 103                                                   MF_CHECKED);
  104. 104                              InvalidateRect(hWnd, NULL, TRUE);
  105. 105                            }
  106. 106                          break;
  107. 107                   }
  108. 108                 return (0);
  109. 109 
  110. 110       case WM_PAINT :
  111. 111             hDC = BeginPaint(hWnd, &ps);
  112. 112 
  113. 113             ShowMapModeDemo(hWnd, hDC, MapModeID);
  114. 114 
  115. 115             EndPaint(hWnd, &ps);
  116. 116             break;
  117. 117 
  118. 118 
  119. 119       case WM_DESTROY :
  120. 120                 PostQuitMessage(0);
  121. 121                 break ;
  122. 122 
  123. 123       default :
  124. 124                 return (DefWindowProc(hWnd, message, wParam, lParam));
  125. 125     }
  126. 126    return (NULL);
  127. 127 }
  128. 128 
  129. 129 
  130. 130 void ShowMapModeDemo(HWND hWnd, HDC hDC, int MapModeID)
  131. 131 {
  132. 132    POINT        Screen;
  133. 133    RECT         ClientRect;
  134. 134    TEXTMETRIC   tm;
  135. 135    int          CharY;
  136. 136    char         szString1[50], szString2[50];
  137. 137    char         szString3[50], szString4[50];
  138. 138 
  139. 139    switch (MapModeID)
  140. 140      {
  141. 141        case IDM_TEXT :
  142. 142               SetMapMode(hDC, MM_TEXT);
  143. 143               break;
  144. 144 
  145. 145        case IDM_LOMET :
  146. 146               SetMapMode(hDC, MM_LOMETRIC);
  147. 147               break;
  148. 148 
  149. 149        case IDM_HIMET :
  150. 150               SetMapMode(hDC, MM_HIMETRIC);
  151. 151               break;
  152. 152 
  153. 153        case IDM_LOENG :
  154. 154               SetMapMode(hDC, MM_LOENGLISH);
  155. 155               break;
  156. 156 
  157. 157        case IDM_HIENG :
  158. 158               SetMapMode(hDC, MM_HIENGLISH);
  159. 159               break;
  160. 160 
  161. 161        case IDM_TWIPS :
  162. 162               SetMapMode(hDC, MM_TWIPS);
  163. 163               break;
  164. 164      }
  165. 165 
  166. 166    Screen.x = GetSystemMetrics(SM_CXSCREEN);
  167. 167    Screen.y = GetSystemMetrics(SM_CYSCREEN);
  168. 168    DPtoLP(hDC, &Screen, 1);
  169. 169    Screen.x = abs(Screen.x);
  170. 170    Screen.y = abs(Screen.y);
  171. 171 
  172. 172    GetClientRect(hWnd, &ClientRect);
  173. 173    DPtoLP(hDC, (LPPOINT) &ClientRect, 2);
  174. 174 
  175. 175    SaveDC(hDC);
  176. 176 
  177. 177    SetMapMode(hDC, MM_TEXT);
  178. 178    SelectObject(hDC, GetStockObject(SYSTEM_FIXED_FONT));
  179. 179 
  180. 180    GetTextMetrics(hDC, &tm);
  181. 181    CharY = tm.tmHeight + tm.tmExternalLeading;
  182. 182 
  183. 183    sprintf(szString1, "Screen Width  : %d", Screen.x);
  184. 184    sprintf(szString2, "Screen Height : %d", Screen.y);
  185. 185    sprintf(szString3, "  Left-Top Point   : (%d , %d)",
  186. 186                       ClientRect.left, ClientRect.top);
  187. 187    sprintf(szString4, "Right-Bottom Point : (%d , %d)",
  188. 188                       ClientRect.right, ClientRect.bottom);
  189. 189 
  190. 190    TextOut(hDC, 10, 10,         szString1, strlen(szString1));
  191. 191    TextOut(hDC, 10, 10+CharY,   szString2, strlen(szString2));
  192. 192    TextOut(hDC, 10, 10+CharY*3, szString3, strlen(szString3));
  193. 193    TextOut(hDC, 10, 10+CharY*4, szString4, strlen(szString4));
  194. 194 
  195. 195    RestoreDC(hDC, -1);
  196. 196 
  197. 197    SelectObject(hDC, GetStockObject(NULL_BRUSH));
  198. 198    if (MapModeID == IDM_TEXT)
  199. 199         Ellipse(hDC, 100, 100, 600, 400);
  200. 200     else
  201. 201         Ellipse(hDC, 100, -100, 600, -400);
  202. 202 }