ClipBmpView.cpp
上传用户:sdpcwz
上传日期:2009-12-14
资源大小:1237k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // ClipBmpView.cpp : implementation of the CClipBmpView class
  2. //
  3. #include "stdafx.h"
  4. #include "ClipBmp.h"
  5. #include "ClipBmpDoc.h"
  6. #include "ClipBmpView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CClipBmpView
  14. IMPLEMENT_DYNCREATE(CClipBmpView, CView)
  15. BEGIN_MESSAGE_MAP(CClipBmpView, CView)
  16. //{{AFX_MSG_MAP(CClipBmpView)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG_MAP
  20. // Standard printing commands
  21. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  22. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CClipBmpView construction/destruction
  27. CClipBmpView::CClipBmpView()
  28. {
  29. // TODO: add construction code here
  30. }
  31. CClipBmpView::~CClipBmpView()
  32. {
  33. }
  34. BOOL CClipBmpView::PreCreateWindow(CREATESTRUCT& cs)
  35. {
  36. // TODO: Modify the Window class or styles here by modifying
  37. //  the CREATESTRUCT cs
  38. return CView::PreCreateWindow(cs);
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CClipBmpView drawing
  42. void CClipBmpView::OnDraw(CDC* pDC)
  43. {
  44. CClipBmpDoc* pDoc = GetDocument();
  45. ASSERT_VALID(pDoc);
  46. // TODO: add draw code for native data here
  47. //取得位图
  48. CBitmap bmp;
  49. bmp.LoadBitmap(IDB_BITMAP1);
  50. BITMAP Bitmap;
  51. bmp.GetBitmap(&Bitmap);
  52. //创建内存设备场景
  53. CDC MemDC;
  54. MemDC.CreateCompatibleDC(pDC);
  55. //将位图选入内存设备场景
  56. CBitmap* pOldBmp = MemDC.SelectObject(&bmp);
  57. //创建椭圆形裁剪区并选入内存设备场景
  58. CRgn rgn;
  59. rgn.CreateEllipticRgn(0,0,Bitmap.bmWidth,Bitmap.bmHeight);
  60. pDC->SelectClipRgn(&rgn);
  61. //显示设备场景
  62. pDC->BitBlt(0,0,Bitmap.bmWidth,Bitmap.bmHeight,&MemDC,0,0,SRCCOPY);
  63. //还原内存设备场景
  64. MemDC.SelectObject(pOldBmp);
  65. MemDC.DeleteDC();
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CClipBmpView printing
  69. BOOL CClipBmpView::OnPreparePrinting(CPrintInfo* pInfo)
  70. {
  71. // default preparation
  72. return DoPreparePrinting(pInfo);
  73. }
  74. void CClipBmpView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  75. {
  76. // TODO: add extra initialization before printing
  77. }
  78. void CClipBmpView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  79. {
  80. // TODO: add cleanup after printing
  81. }
  82. /////////////////////////////////////////////////////////////////////////////
  83. // CClipBmpView diagnostics
  84. #ifdef _DEBUG
  85. void CClipBmpView::AssertValid() const
  86. {
  87. CView::AssertValid();
  88. }
  89. void CClipBmpView::Dump(CDumpContext& dc) const
  90. {
  91. CView::Dump(dc);
  92. }
  93. CClipBmpDoc* CClipBmpView::GetDocument() // non-debug version is inline
  94. {
  95. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CClipBmpDoc)));
  96. return (CClipBmpDoc*)m_pDocument;
  97. }
  98. #endif //_DEBUG
  99. /////////////////////////////////////////////////////////////////////////////
  100. // CClipBmpView message handlers