📄 paint.c
字号:
332 0, 0);
333 ReleaseDC(hWnd, hDC);
334
335 FileSave(hWnd);
336 break;
337
338 case IDM_SAVEAS :
339 hDC = GetDC(hWnd);
340 BackUpGraph(hDC, hMenu,
341 OX, OY, CX, CY,
342 0, 0);
343 ReleaseDC(hWnd, hDC);
344
345 FileSaveAs(hWnd);
346 break;
347
348 case IDM_PRINT :
349 if (bTextWorking)
350 EndWrite(hWnd);
351
352 hDC = GetDC(hWnd);
353 BackUpGraph(hDC, hMenu,
354 OX, OY, CX, CY,
355 0, 0);
356 ReleaseDC(hWnd, hDC);
357
358 PrintGraph(hWnd, MemX, MemY);
359 break;
360
361 case IDM_QUIT :
362 SendMessage(hWnd, WM_CLOSE, 0, 0);
363 break;
364
365 case IDM_UNDO :
366 if (ToolID == IDM_BLOCK)
367 {
368 hDC = GetDC(hWnd);
369 RecoverBlock();
370 CancelBound(hDC, hMenu);
371 ReleaseDC(hWnd, hDC);
372 }
373 if (bTextWorking)
374 EndWrite(hWnd);
375
376 InvalidateRect(hWnd, NULL, FALSE);
377 EnableMenuItem(hMenu, IDM_UNDO,
378 MF_GRAYED);
379 CanUndo = FALSE;
380 break;
381
382 case IDM_COPY :
383 if (ToolID == IDM_BLOCK)
384 Copy(hWnd);
385 break;
386
387 case IDM_PASTE :
388 Paste(hWnd);
389 break;
390
391 case IDM_CUT :
392 if (ToolID == IDM_BLOCK)
393 Cut(hWnd);
394 break;
395 }
396 return (0);
397
398 case WM_INITMENUPOPUP :
399 if (LOWORD(lParam)==1 &&
400 HIWORD(lParam)==0)
401 {
402 if (IsClipboardFormatAvailable(
403 CF_BITMAP))
404 EnableMenuItem(wParam, IDM_PASTE,
405 MF_ENABLED);
406 else
407 EnableMenuItem(wParam, IDM_PASTE,
408 MF_GRAYED);
409 }
410
411 return (0);
412
413 case WM_LBUTTONDOWN :
414 if (ToolID == IDM_TEXT)
415 {
416 BeginWrite(hWnd,
417 LOWORD(lParam),
418 HIWORD(lParam));
419 return (0);
420 }
421
422 if (bLBDown == TRUE)
423 return (0);
424
425 SetCapture(hWnd);
426 bLBDown = TRUE;
427
428 OrgPoint = MAKEPOINT(lParam);
429 CurPoint = PrePoint = OrgPoint;
430
431 hDC = GetDC(hWnd);
432 DrawGraph(hDC, GetMenu(hWnd), FALSE);
433 ReleaseDC(hWnd, hDC);
434
435 return (0);
436
437 case WM_LBUTTONUP :
438 if (bLBDown == FALSE)
439 return (0);
440 bLBDown = FALSE;
441 ReleaseCapture();
442
443 hDC = GetDC(hWnd);
444 DrawGraph(hDC, GetMenu(hWnd), TRUE);
445 ReleaseDC(hWnd, hDC);
446
447 return (0);
448
449 case WM_MOUSEMOVE :
450 if (bLBDown)
451 {
452 PrePoint = CurPoint;
453 CurPoint = MAKEPOINT(lParam);
454
455 hDC = GetDC(hWnd);
456 DrawGraph(hDC, GetMenu(hWnd), FALSE);
457 ReleaseDC(hWnd, hDC);
458 }
459 return (0);
460
461 case WM_CHAR :
462 if (bTextWorking)
463 ProcessChar(hWnd, wParam);
464 return (0);
465
466 case WM_SIZE :
467 CX = LOWORD(lParam);
468 CY = HIWORD(lParam);
469 SetScrollRange(hWnd, SB_HORZ,
470 0, MemX-CX, TRUE);
471 SetScrollRange(hWnd, SB_VERT,
472 0, MemY-CY, TRUE);
473 OX = min(OX, MemX-CX);
474 OY = min(OY, MemY-CY);
475 SetScrollPos(hWnd, SB_HORZ, OX, TRUE);
476 SetScrollPos(hWnd, SB_VERT, OY, TRUE);
477 return (0);
478
479 case WM_PAINT :
480 hDC = BeginPaint(hWnd, &ps);
481
482 BitBlt(hDC,
483 ps.rcPaint.left,
484 ps.rcPaint.top,
485 ps.rcPaint.right-ps.rcPaint.left,
486 ps.rcPaint.bottom-ps.rcPaint.top,
487 hMemDC,
488 OX+ps.rcPaint.left,
489 OY+ps.rcPaint.top,
490 SRCCOPY);
491
492 EndPaint(hWnd, &ps);
493 return (0);
494
495 case WM_HSCROLL :
496 switch (wParam)
497 {
498 case SB_TOP :
499 Temp = 0;
500 break;
501
502 case SB_BOTTOM :
503 Temp = MemX - CX;
504 break;
505
506 case SB_LINEUP :
507 Temp = OX - 20;
508 break;
509
510 case SB_PAGEUP :
511 Temp = OX - CX;
512 break;
513
514 case SB_LINEDOWN :
515 Temp = OX + 20;
516 break;
517
518 case SB_PAGEDOWN :
519 Temp = OX + CX;
520 break;
521
522 case SB_THUMBPOSITION :
523 Temp = LOWORD(lParam);
524 break;
525
526 default :
527 return (NULL);
528 }
529 Temp = min(max(0, Temp), MemX-CX);
530 if (Temp == OX) return (0);
531
532 OX = Temp;
533 SetScrollPos(hWnd, SB_HORZ, OX, TRUE);
534 InvalidateRect(hWnd, NULL, TRUE);
535
536 return (0);
537
538 case WM_VSCROLL :
539 switch (wParam)
540 {
541 case SB_TOP :
542 Temp = 0;
543 break;
544
545 case SB_BOTTOM :
546 Temp = MemY - CY;
547 break;
548
549 case SB_LINEUP :
550 Temp = OY - 20;
551 break;
552
553 case SB_PAGEUP :
554 Temp = OY - CY;
555 break;
556
557 case SB_LINEDOWN :
558 Temp = OY + 20;
559 break;
560
561 case SB_PAGEDOWN :
562 Temp = OY + CY;
563 break;
564
565 case SB_THUMBPOSITION :
566 Temp = LOWORD(lParam);
567 break;
568
569 default :
570 return (NULL);
571 }
572 Temp = min(max(0, Temp), MemY-CY);
573 if (Temp == OY) return (0);
574
575 OY = Temp;
576 SetScrollPos(hWnd, SB_VERT, OY, TRUE);
577 InvalidateRect(hWnd, NULL, TRUE);
578
579 return (0);
580
581 case WM_SETFOCUS :
582 if (bTextWorking)
583 {
584 CreateCaret(hWnd, NULL, 1, CharY);
585 SetCaretPos(CharPosX, CharPosY);
586 ShowCaret(hWnd);
587 bCaret = TRUE;
588 }
589 return (0);
590
591 case WM_KILLFOCUS :
592 if (bTextWorking)
593 {
594 HideCaret(hWnd);
595 DestroyCaret();
596 bCaret = FALSE;
597 }
598 return (0);
599
600 case WM_ACTIVATE :
601 if (wParam != 0)
602 break;
603 // fall through
604 case WM_SYSCOMMAND :
605
606 if (message==WM_ACTIVATE ||
607 ((wParam & 0xfff0) != SC_MOUSEMENU &&
608 (wParam & 0xfff0) != SC_KEYMENU))
609 {
610 if (bTextWorking)
611 EndWrite(hWnd);
612
613 hMenu = GetMenu(hWnd);
614
615 hDC = GetDC(hWnd);
616 BackUpGraph(hDC, hMenu,
617 OX, OY, CX, CY,
618 0, 0);
619 ReleaseDC(hWnd, hDC);
620 }
621 break;
622
623 case WM_CLOSE :
624 if (bTextWorking)
625 EndWrite(hWnd);
626
627 if (QuerySave(hWnd) == IDCANCEL)
628 return (0);
629 break;
630
631 case WM_DESTROY :
632 DeleteDC(hMemDC);
633 DeleteObject(hBitmap);
634 DeleteStyleMenu();
635 PostQuitMessage(0);
636 return (0);
637 }
638 return(DefWindowProc(hWnd, message, wParam, lParam));
639 }
640
641
642
643 void BackUpGraph(HDC hDC, HMENU hMenu,
644 int OX, int OY, int W, int H,
645 int X, int Y)
646 {
647 if (ToolID==IDM_BLOCK)
648 CancelBound(hDC, hMenu);
649
650 if (CanUndo)
651 {
652 BitBlt(hMemDC, OX, OY, W, H,
653 hDC, X, Y, SRCCOPY);
654
655 EnableMenuItem(hMenu, IDM_UNDO, MF_GRAYED);
656 CanUndo = FALSE;
657 }
658 }
659
660
661
662 HBRUSH MyCreateBrush(int nHatchStyle, COLORREF crColor)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -