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

📄 paint.c

📁 WINDOWS图形编程随书光盘
💻 C
📖 第 1 页 / 共 3 页
字号:
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 + -