📄 demo4_6.c
字号:
278 break;
279 }
280
281 if (BrushID < IDM_WHITE)
282 hBrush = CreateSolidBrush(rgbColor);
283 else
284 {
285 if (BrushID == IDM_WHITE)
286 hBrush = GetStockObject(WHITE_BRUSH);
287 else
288 if (BrushID == IDM_GRAY)
289 hBrush = GetStockObject(LTGRAY_BRUSH);
290 else
291 hBrush = GetStockObject(BLACK_BRUSH);
292 }
293
294 return(SelectObject(hDC, hBrush));
295 }
296
297
298
299 void ChangeTime(HDC hDC, int h, int m, int s)
300 {
301 float Rad;
302 POINT Head, Tail, Side1, Side2;
303 POINT Poly[4];
304 HANDLE hBrush, hPreBrush;
305 HANDLE hPen;
306
307 if (sec == s)
308 return ;
309
310 if (MapModeID == IDM_ISO)
311 SetMapMode(hDC, MM_ISOTROPIC);
312 else
313 SetMapMode(hDC, MM_ANISOTROPIC);
314
315 SetWindowExt(hDC, 200, 200);
316 SetViewportExt(hDC, Client.x, -Client.y);
317
318 SetViewportOrg(hDC, Client.x/2, Client.y/2);
319
320 SetROP2(hDC, R2_NOTXORPEN);
321
322 /* Clear the sec pin */
323 Rad = PI/2 - 2*PI*sec/60;
324 Head.x = secR * cos(Rad);
325 Head.y = secR * sin(Rad);
326 Tail.x = 0;
327 Tail.y = 0;
328 MoveTo(hDC, Head.x, Head.y);
329 LineTo(hDC, Tail.x, Tail.y);
330
331 if (min != m || hour != h)
332 {
333 SetROP2(hDC, R2_COPYPEN);
334
335 hBrush = GetStockObject(WHITE_BRUSH);
336 SelectObject(hDC, hBrush);
337 hPen = GetStockObject(WHITE_PEN);
338 SelectObject(hDC, hPen);
339
340 /* Clear the hour pin */
341 Rad = PI/2 - (2*PI*hour/12 + 2*PI*min/60/12);
342 Head.x = hourR * cos(Rad);
343 Head.y = hourR * sin(Rad);
344 Tail.x = TailR * cos(Rad+PI);
345 Tail.y = TailR * sin(Rad+PI);
346 Side1.x = SideR * cos(Rad+PI/2);
347 Side1.y = SideR * sin(Rad+PI/2);
348 Side2.x = SideR * cos(Rad-PI/2);
349 Side2.y = SideR * sin(Rad-PI/2);
350
351 Poly[0] = Head;
352 Poly[1] = Side1;
353 Poly[2] = Tail;
354 Poly[3] = Side2;
355 Polygon(hDC, Poly, 4);
356
357 /* Clear the min pin */
358 Rad = PI/2 - 2*PI*min/60;
359 Head.x = minR * cos(Rad);
360 Head.y = minR * sin(Rad);
361 Tail.x = TailR * cos(Rad+PI);
362 Tail.y = TailR * sin(Rad+PI);
363 Side1.x = SideR * cos(Rad+PI/2);
364 Side1.y = SideR * sin(Rad+PI/2);
365 Side2.x = SideR * cos(Rad-PI/2);
366 Side2.y = SideR * sin(Rad-PI/2);
367
368 Poly[0] = Head;
369 Poly[1] = Side1;
370 Poly[2] = Tail;
371 Poly[3] = Side2;
372 Polygon(hDC, Poly, 4);
373
374 /* Update the current hour and min */
375 hour = h;
376 min = m;
377
378 /* Create the brush that matches */
379 /* the Brush color menu */
380 hPreBrush = SelectBrush(hDC);
381
382 hPen = GetStockObject(BLACK_PEN);
383 SelectObject(hDC, hPen);
384
385 /* Redraw the hour pin */
386 Rad = PI/2 - (2*PI*hour/12 + 2*PI*min/60/12);
387 Head.x = hourR * cos(Rad);
388 Head.y = hourR * sin(Rad);
389 Tail.x = TailR * cos(Rad+PI);
390 Tail.y = TailR * sin(Rad+PI);
391 Side1.x = SideR * cos(Rad+PI/2);
392 Side1.y = SideR * sin(Rad+PI/2);
393 Side2.x = SideR * cos(Rad-PI/2);
394 Side2.y = SideR * sin(Rad-PI/2);
395
396 Poly[0] = Head;
397 Poly[1] = Side1;
398 Poly[2] = Tail;
399 Poly[3] = Side2;
400 Polygon(hDC, Poly, 4);
401
402 /* Redraw the min pin */
403 Rad = PI/2 - 2*PI*min/60;
404 Head.x = minR * cos(Rad);
405 Head.y = minR * sin(Rad);
406 Tail.x = TailR * cos(Rad+PI);
407 Tail.y = TailR * sin(Rad+PI);
408 Side1.x = SideR * cos(Rad+PI/2);
409 Side1.y = SideR * sin(Rad+PI/2);
410 Side2.x = SideR * cos(Rad-PI/2);
411 Side2.y = SideR * sin(Rad-PI/2);
412
413 Poly[0] = Head;
414 Poly[1] = Side1;
415 Poly[2] = Tail;
416 Poly[3] = Side2;
417 Polygon(hDC, Poly, 4);
418
419 hBrush = SelectObject(hDC, hPreBrush);
420 if (BrushID < IDM_WHITE)
421 DeleteObject(hBrush);
422 }
423
424 /* Update the current sec */
425 sec = s;
426
427 SetROP2(hDC, R2_NOTXORPEN);
428
429 /* Redraw the sec pin */
430 Rad = PI/2 - 2*PI*sec/60;
431 Head.x = secR * cos(Rad);
432 Head.y = secR * sin(Rad);
433 Tail.x = 0;
434 Tail.y = 0;
435
436 MoveTo(hDC, Head.x, Head.y);
437 LineTo(hDC, Tail.x, Tail.y);
438 }
439
440
441 void DrawTime(HDC hDC)
442 {
443 float Rad;
444 POINT Head, Tail, Side1, Side2;
445 POINT Poly[4];
446 HANDLE hBrush, hPreBrush;
447
448 /* Create the brush that matches */
449 /* the Brush color menu */
450 hPreBrush = SelectBrush(hDC);
451
452 /* Draw the hour */
453 Rad = PI/2 - (2*PI*hour/12 + 2*PI*min/60/12);
454 Head.x = hourR * cos(Rad);
455 Head.y = hourR * sin(Rad);
456 Tail.x = TailR * cos(Rad+PI);
457 Tail.y = TailR * sin(Rad+PI);
458 Side1.x = SideR * cos(Rad+PI/2);
459 Side1.y = SideR * sin(Rad+PI/2);
460 Side2.x = SideR * cos(Rad-PI/2);
461 Side2.y = SideR * sin(Rad-PI/2);
462
463 Poly[0] = Head;
464 Poly[1] = Side1;
465 Poly[2] = Tail;
466 Poly[3] = Side2;
467 Polygon(hDC, Poly, 4);
468
469 /* Draw the min */
470 Rad = PI/2 - 2*PI*min/60;
471 Head.x = minR * cos(Rad);
472 Head.y = minR * sin(Rad);
473 Tail.x = TailR * cos(Rad+PI);
474 Tail.y = TailR * sin(Rad+PI);
475 Side1.x = SideR * cos(Rad+PI/2);
476 Side1.y = SideR * sin(Rad+PI/2);
477 Side2.x = SideR * cos(Rad-PI/2);
478 Side2.y = SideR * sin(Rad-PI/2);
479
480 Poly[0] = Head;
481 Poly[1] = Side1;
482 Poly[2] = Tail;
483 Poly[3] = Side2;
484 Polygon(hDC, Poly, 4);
485
486 hBrush = SelectObject(hDC, hPreBrush);
487 if (BrushID < IDM_WHITE)
488 DeleteObject(hBrush);
489
490 /* Draw the sec */
491 SetROP2(hDC, R2_NOTXORPEN);
492
493 Rad = PI/2 - 2*PI*sec/60;
494 Head.x = secR * cos(Rad);
495 Head.y = secR * sin(Rad);
496 Tail.x = 0;
497 Tail.y = 0;
498
499 MoveTo(hDC, Head.x, Head.y);
500 LineTo(hDC, Tail.x, Tail.y);
501 }
502
503
504
505 void DrawClockFrame(HDC hDC)
506 {
507 POINT Center;
508 int i;
509 float Rad;
510
511 SelectObject(hDC, GetStockObject(WHITE_BRUSH));
512
513 if (TypeID == IDM_CIRCLE)
514 Ellipse(hDC, -97, -97, 97, 97);
515 else
516 Rectangle(hDC, -97, -97, 97, 97);
517
518 SelectObject(hDC, GetStockObject(BLACK_BRUSH));
519
520 for (i=0; i<360; i+=6)
521 {
522 Rad = 2*PI*i/360;
523 Center.x = 90 * cos(Rad);
524 Center.y = 90 * sin(Rad);
525
526 if (i%30 == 0)
527 Rectangle(hDC, Center.x-3, Center.y-3,
528 Center.x+3, Center.y+3);
529 else
530 if (TypeID == IDM_CIRCLE &&
531 Client.x>=100 && Client.y>=100)
532 SetPixel(hDC, Center.x, Center.y,
533 RGB(0, 0, 0));
534 }
535 }
536
537
538
539 void DrawClock(HDC hDC)
540 {
541 if (MapModeID == IDM_ISO)
542 SetMapMode(hDC, MM_ISOTROPIC);
543 else
544 SetMapMode(hDC, MM_ANISOTROPIC);
545
546 SetWindowExt(hDC, 200, 200);
547 SetViewportExt(hDC, Client.x, -Client.y);
548
549 SetViewportOrg(hDC, Client.x/2, Client.y/2);
550
551 DrawClockFrame(hDC);
552 DrawTime(hDC);
553 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -