📄 demo1_3.c
字号:
1 /****************************************************************/
2 /* Demo1_3 --- The simple example */
3 /****************************************************************/
4
5 #include <windows.h>
6 #include "demo1_3.h"
7
8 #define MAXPOINTS 30
9
10 int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
11 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
12
13
14
15 /****************************************************************/
16 /* WinMain() */
17 /****************************************************************/
18
19 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
20 LPSTR lpszCmdLine, int nCmdShow)
21 {
22 WNDCLASS wclass;
23 MSG msg;
24 HWND hWnd;
25 char szName[] = "Demo1_3";
26
27 if (!hPrevInstance)
28 {
29 wclass.style = CS_HREDRAW | CS_VREDRAW;
30 wclass.lpfnWndProc = MainWndProc;
31 wclass.cbClsExtra = 0;
32 wclass.cbWndExtra = 0;
33 wclass.hInstance = hInstance;
34 wclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
35 wclass.hCursor = LoadCursor(NULL, IDC_ARROW);
36 wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
37 wclass.lpszMenuName = szName;
38 wclass.lpszClassName = szName;
39
40 if (!RegisterClass (&wclass))
41 return (FALSE);
42 }
43
44 hWnd = CreateWindow(
45 szName,
46 "The simple example - V.2",
47 WS_OVERLAPPEDWINDOW,
48 CW_USEDEFAULT,
49 CW_USEDEFAULT,
50 CW_USEDEFAULT,
51 CW_USEDEFAULT,
52 NULL,
53 NULL,
54 hInstance,
55 NULL );
56
57 if (!hWnd)
58 return (FALSE);
59
60 ShowWindow(hWnd, nCmdShow);
61 UpdateWindow(hWnd);
62
63 while (GetMessage(&msg, NULL, NULL,NULL))
64 {
65 TranslateMessage(&msg);
66 DispatchMessage(&msg);
67 }
68 return (msg.wParam);
69 }
70
71
72
73 /****************************************************************/
74 /* MainWndProc() */
75 /****************************************************************/
76
77 typedef struct tagSHAPE {
78 int x1, y1;
79 int x2, y2;
80 int ShapeID;
81 } SHAPE;
82
83 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
84 WORD wParam, LONG lParam)
85 {
86 PAINTSTRUCT ps;
87 HDC hDC;
88 HMENU hMenu;
89 static int ShapeID = IDM_LINE;
90 RECT Rect;
91 int x1, x2, y1, y2;
92 static int CX, CY;
93 int i;
94 static int Num = 0;
95 static SHAPE Shape[MAXPOINTS];
96
97 switch (message)
98 {
99 case WM_CREATE :
100 srand(LOWORD(GetCurrentTime()));
101 break;
102
103 case WM_COMMAND :
104 switch(wParam)
105 {
106 case IDM_CLEAR :
107 Num = 0;
108 InvalidateRect(hWnd, NULL, TRUE);
109 UpdateWindow(hWnd);
110 break;
111
112 case IDM_EXIT :
113 DestroyWindow (hWnd);
114 break;
115
116 case IDM_LINE :
117 if (ShapeID != IDM_LINE)
118 {
119 hMenu = GetMenu(hWnd);
120 CheckMenuItem(hMenu, ShapeID,
121 MF_UNCHECKED);
122 ShapeID = IDM_LINE;
123 CheckMenuItem(hMenu, ShapeID,
124 MF_CHECKED);
125 }
126 break;
127
128 case IDM_RECT :
129 if (ShapeID != IDM_RECT)
130 {
131 hMenu = GetMenu(hWnd);
132 CheckMenuItem(hMenu, ShapeID,
133 MF_UNCHECKED);
134 ShapeID = IDM_RECT;
135 CheckMenuItem(hMenu, ShapeID,
136 MF_CHECKED);
137 }
138 break;
139
140 case IDM_ELLIP :
141 if (ShapeID != IDM_ELLIP)
142 {
143 hMenu = GetMenu(hWnd);
144 CheckMenuItem(hMenu, ShapeID,
145 MF_UNCHECKED);
146 ShapeID = IDM_ELLIP;
147 CheckMenuItem(hMenu, ShapeID,
148 MF_CHECKED);
149 }
150 break;
151
152 case IDM_DRAW :
153 if (Num == MAXPOINTS)
154 {
155 MessageBox(hWnd,
156 "Memory not enough", "Warning",
157 MB_OK | MB_ICONEXCLAMATION);
158 break;
159 }
160
161 hDC = GetDC(hWnd);
162
163 x1 = rand() % CX;
164 y1 = rand() % CY;
165 x2 = rand() % CX;
166 y2 = rand() % CY;
167
168 switch (ShapeID)
169 {
170 case IDM_LINE :
171 MoveTo(hDC, x1, y1);
172 LineTo(hDC, x2, y2);
173 break;
174
175 case IDM_RECT :
176 Rectangle(hDC, x1, y1, x2, y2);
177 break;
178
179 case IDM_ELLIP :
180 Ellipse(hDC, x1, y1, x2, y2);
181 break;
182 }
183
184 ReleaseDC(hWnd, hDC);
185
186 Shape[Num].x1 = x1;
187 Shape[Num].y1 = y1;
188 Shape[Num].x2 = x2;
189 Shape[Num].y2 = y2;
190 Shape[Num].ShapeID = ShapeID;
191 Num ++;
192 break;
193 }
194 break;
195
196 case WM_PAINT :
197 hDC = BeginPaint(hWnd, &ps);
198 for (i=0; i<Num; i++)
199 {
200 switch (Shape[i].ShapeID)
201 {
202 case IDM_LINE :
203 MoveTo(hDC, Shape[i].x1, Shape[i].y1);
204 LineTo(hDC, Shape[i].x2, Shape[i].y2);
205 break;
206
207 case IDM_RECT :
208 Rectangle(hDC, Shape[i].x1, Shape[i].y1,
209 Shape[i].x2, Shape[i].y2);
210 break;
211
212 case IDM_ELLIP :
213 Ellipse(hDC, Shape[i].x1, Shape[i].y1,
214 Shape[i].x2, Shape[i].y2);
215 break;
216 }
217 }
218 EndPaint(hWnd, &ps);
219 break;
220
221 case WM_SIZE :
222 GetClientRect(hWnd, &Rect);
223 CX = Rect.right - Rect.left;
224 CY = Rect.bottom - Rect.top;
225 break;
226
227 case WM_DESTROY :
228 PostQuitMessage(0);
229 break ;
230
231 default :
232 return (DefWindowProc(hWnd, message, wParam, lParam));
233 }
234 return (NULL);
235 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -