📄 demo3_3.c
字号:
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 + -