⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo3_3.c

📁 WINDOWS图形编程随书光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
  1 /****************************************************************/
  2 /*         Demo3_3   ---  Mapping Mode test                     */
  3 /****************************************************************/
  4 
  5 #include <windows.h>
  6 #include "demo3_3.h"
  7 
  8 #define MAXPOINTS 100
  9 
 10 typedef struct tagSHAPE {
 11            int  x1, y1;
 12            int  x2, y2;
 13            int  ShapeID;
 14            int  MapModeID;
 15 } SHAPE;
 16 
 17 static RECT LineRect;
 18 static RECT RectRect;
 19 static RECT EllipRect;
 20 
 21 
 22 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
 23 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
 24 BOOL FAR PASCAL LineDlgProc(HWND, unsigned, WORD, LONG);
 25 BOOL FAR PASCAL RectDlgProc(HWND, unsigned, WORD, LONG);
 26 BOOL FAR PASCAL EllipDlgProc(HWND, unsigned, WORD, LONG);
 27 
 28 FARPROC lpLineDlgProc;
 29 FARPROC lpRectDlgProc;
 30 FARPROC lpEllipDlgProc;
 31 
 32 void DrawAllGraph(HDC, RECT, SHAPE *, int);
 33 
 34 
 35 
 36 /****************************************************************/
 37 /*                      WinMain()                               */
 38 /****************************************************************/
 39 
 40 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
 41                    LPSTR lpszCmdLine, int nCmdShow)
 42 {
 43    WNDCLASS wclass;
 44    MSG      msg;
 45    HWND     hWnd;
 46    char     szName[] = "Demo3_3";
 47 
 48    if (!hPrevInstance)
 49     {
 50         wclass.style         = NULL;
 51         wclass.lpfnWndProc   = MainWndProc;
 52         wclass.cbClsExtra    = 0;
 53         wclass.cbWndExtra    = 0;
 54         wclass.hInstance     = hInstance;
 55         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 56         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 57         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
 58         wclass.lpszMenuName  = szName;
 59         wclass.lpszClassName = szName;
 60 
 61         if (!RegisterClass (&wclass))
 62            return (FALSE);
 63     }
 64 
 65     hWnd = CreateWindow(
 66                 szName,
 67                 "Mapping Mode test",
 68                 WS_OVERLAPPEDWINDOW,
 69                 CW_USEDEFAULT,
 70                 CW_USEDEFAULT,
 71                 CW_USEDEFAULT,
 72                 CW_USEDEFAULT,
 73                 NULL,
 74                 NULL,
 75                 hInstance,
 76                 NULL );
 77 
 78     if (!hWnd)
 79         return (FALSE);
 80 
 81     ShowWindow(hWnd, nCmdShow);
 82     UpdateWindow(hWnd);
 83 
 84     while (GetMessage(&msg, NULL, NULL,NULL))
 85        {
 86            TranslateMessage(&msg);
 87            DispatchMessage(&msg);
 88        }
 89     return (msg.wParam);
 90 }
 91 
 92 
 93 
 94 /****************************************************************/
 95 /*                      MainWndProc()                           */
 96 /****************************************************************/
 97 
 98 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
 99                             WORD wParam, LONG lParam)
100 {
101    PAINTSTRUCT   ps;
102    HDC           hDC;
103    HMENU         hMenu;
104    static int    MapModeID = IDM_TEXT;
105    static int    ShapeID = IDM_LINE;
106    int           i;
107    static int    Num = 0;
108    static SHAPE  Shape[MAXPOINTS];
109    static HANDLE hInst;
110    HANDLE        hBrush;
111 
112    switch (message)
113     {
114         case WM_CREATE :
115                 hMenu = GetMenu(hWnd);
116                 CheckMenuItem(hMenu, MapModeID, MF_CHECKED);
117                 CheckMenuItem(hMenu, ShapeID, MF_CHECKED);
118 
119                 SetRect(&LineRect, 0, 0, 0, 0);
120                 SetRect(&RectRect, 0, 0, 0, 0);
121                 SetRect(&EllipRect, 0, 0, 0, 0);
122                 hInst =  ((LPCREATESTRUCT)lParam)->hInstance;
123                 return (0);
124 
125         case WM_COMMAND :
126                 switch(wParam)
127                   {
128                     case IDM_TEXT  :
129                     case IDM_LOMET :
130                     case IDM_HIMET :
131                     case IDM_LOENG :
132                     case IDM_HIENG :
133                     case IDM_TWIPS :
134 
135                          if (MapModeID != wParam)
136                            {
137                              hMenu = GetMenu(hWnd);
138                              CheckMenuItem(hMenu, MapModeID,
139                                                   MF_UNCHECKED);
140                              MapModeID = wParam;
141                              CheckMenuItem(hMenu, wParam,
142                                                   MF_CHECKED);
143                            }
144                          break;
145 
146                     case IDM_LINE :
147                          if (ShapeID != wParam)
148                            {
149                              hMenu = GetMenu(hWnd);
150                              CheckMenuItem(hMenu, ShapeID,
151                                                   MF_UNCHECKED);
152                              ShapeID = wParam;
153                              CheckMenuItem(hMenu, wParam,
154                                                   MF_CHECKED);
155                            }
156 
157                          lpLineDlgProc = MakeProcInstance(
158                                  (FARPROC) LineDlgProc, hInst);
159 
160                          DialogBox(hInst, "LINEDLG", hWnd,
161                                    lpLineDlgProc);
162 
163                          FreeProcInstance(lpLineDlgProc);
164                          break;
165 
166                     case IDM_RECT :
167                          if (ShapeID != wParam)
168                            {
169                              hMenu = GetMenu(hWnd);
170                              CheckMenuItem(hMenu, ShapeID,
171                                                   MF_UNCHECKED);
172                              ShapeID = wParam;
173                              CheckMenuItem(hMenu, wParam,
174                                                   MF_CHECKED);
175                            }
176 
177                          lpRectDlgProc = MakeProcInstance(
178                                  (FARPROC) RectDlgProc, hInst);
179 
180                          DialogBox(hInst, "RECTDLG", hWnd,
181                                    lpRectDlgProc);
182 
183                          FreeProcInstance(lpRectDlgProc);
184                          break;
185 
186                     case IDM_ELLIP :
187 
188                          if (ShapeID != wParam)
189                            {
190                              hMenu = GetMenu(hWnd);
191                              CheckMenuItem(hMenu, ShapeID,
192                                                   MF_UNCHECKED);
193                              ShapeID = wParam;
194                              CheckMenuItem(hMenu, wParam,
195                                                   MF_CHECKED);
196                            }
197 
198                          lpEllipDlgProc = MakeProcInstance(
199                                  (FARPROC) EllipDlgProc, hInst);
200 
201                          DialogBox(hInst, "ELLIPDLG", hWnd,
202                                    lpEllipDlgProc);
203 
204                          FreeProcInstance(lpEllipDlgProc);
205                          break;
206 
207                     case IDM_DRAW :
208                          if (Num == MAXPOINTS)
209                            {
210                               MessageBox(hWnd,
211                                 "Memory not enough", "Warning",
212                                 MB_OK | MB_ICONEXCLAMATION);
213                               break;
214                            }
215 
216                          hDC = GetDC(hWnd);
217 
218                          switch (MapModeID)
219                            {
220                              case IDM_TEXT :
221                                  SetMapMode(hDC, MM_TEXT);
222                                  break;
223 
224                              case IDM_LOMET :
225                                  SetMapMode(hDC, MM_LOMETRIC);
226                                  break;
227 
228                              case IDM_HIMET :
229                                  SetMapMode(hDC, MM_HIMETRIC);
230                                  break;
231 
232                              case IDM_LOENG :
233                                  SetMapMode(hDC, MM_LOENGLISH);
234                                  break;
235 
236                              case IDM_HIENG :
237                                  SetMapMode(hDC, MM_HIENGLISH);
238                                  break;
239 
240                              case IDM_TWIPS :
241                                  SetMapMode(hDC, MM_TWIPS);
242                                  break;
243                            }
244 
245                          switch (ShapeID)
246                            {
247                             case IDM_LINE :
248                                  MoveTo(hDC, LineRect.left,
249                                            LineRect.top);
250                                  LineTo(hDC, LineRect.right,
251                                            LineRect.bottom);
252                                  Shape[Num].x1 =
253                                         LineRect.left;
254                                  Shape[Num].y1 =
255                                         LineRect.top;
256                                  Shape[Num].x2 =
257                                         LineRect.right;
258                                  Shape[Num].y2 =
259                                         LineRect.bottom;
260                                  break;
261 
262                             case IDM_RECT :
263                                  hBrush = GetStockObject(
264                                                  NULL_BRUSH);
265                                  SelectObject(hDC, hBrush);
266                                  Rectangle(hDC, RectRect.left,
267                                            RectRect.top,
268                                            RectRect.right,
269                                            RectRect.bottom);
270                                  Shape[Num].x1 =
271                                         RectRect.left;
272                                  Shape[Num].y1 =
273                                         RectRect.top;
274                                  Shape[Num].x2 =
275                                         RectRect.right;
276                                  Shape[Num].y2 =
277                                         RectRect.bottom;
278                                  break;
279 
280                             case IDM_ELLIP :
281                                  hBrush = GetStockObject(
282                                                  NULL_BRUSH);
283                                  SelectObject(hDC, hBrush);
284                                  Ellipse(hDC, EllipRect.left,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -