ViewDIBView.cpp
上传用户:elida16851
上传日期:2022-08-05
资源大小:2048k
文件大小:4k
源码类别:

图形图象

开发平台:

Visual C++

  1. // ViewDIBView.cpp : implementation of the CViewDIBView class
  2. //
  3. #include "stdafx.h"
  4. #include "ViewDIB.h"
  5. #include "MainFrm.h"
  6. #include "Dib.h"
  7. #include "ViewDIBDoc.h"
  8. #include "ViewDIBView.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CViewDIBView
  16. IMPLEMENT_DYNCREATE(CViewDIBView, CScrollView)
  17. BEGIN_MESSAGE_MAP(CViewDIBView, CScrollView)
  18. //{{AFX_MSG_MAP(CViewDIBView)
  19. // NOTE - the ClassWizard will add and remove mapping macros here.
  20. //    DO NOT EDIT what you see in these blocks of generated code!
  21. //}}AFX_MSG_MAP
  22. // Standard printing commands
  23. ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
  24. ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
  25. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
  26. ON_MESSAGE(WM_REALIZEPAL, OnRealizePal)
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CViewDIBView construction/destruction
  30. CViewDIBView::CViewDIBView()
  31. {
  32. // TODO: add construction code here
  33. }
  34. CViewDIBView::~CViewDIBView()
  35. {
  36. }
  37. BOOL CViewDIBView::PreCreateWindow(CREATESTRUCT& cs)
  38. {
  39. // TODO: Modify the Window class or styles here by modifying
  40. //  the CREATESTRUCT cs
  41. return CScrollView::PreCreateWindow(cs);
  42. }
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CViewDIBView drawing
  45. void CViewDIBView::OnDraw(CDC* pDC)
  46. {
  47. CViewDIBDoc* pDoc = GetDocument();
  48. ASSERT_VALID(pDoc);
  49. if (! pDoc->m_pDib->IsEmpty())
  50. pDoc->m_pDib->Display(pDC, 0, 0);
  51. }
  52. void CViewDIBView::OnInitialUpdate()
  53. {
  54. CScrollView::OnInitialUpdate();
  55. CViewDIBDoc* pDoc = GetDocument();
  56. CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
  57. SetScrollSizes(MM_TEXT, sizeTotal);
  58. CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
  59. ASSERT_KINDOF(CMainFrame, pAppFrame);
  60. CRect rc;
  61. pAppFrame->GetClientRect(&rc);
  62. if (rc.Width() >= sizeTotal.cx && rc.Height() >= sizeTotal.cy &&
  63. (sizeTotal.cx>0 || sizeTotal.cy>0))
  64. ResizeParentToFit(FALSE);
  65. }
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CViewDIBView printing
  68. BOOL CViewDIBView::OnPreparePrinting(CPrintInfo* pInfo)
  69. {
  70. // default preparation
  71. return DoPreparePrinting(pInfo);
  72. }
  73. void CViewDIBView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  74. {
  75. // TODO: add extra initialization before printing
  76. }
  77. void CViewDIBView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  78. {
  79. // TODO: add cleanup after printing
  80. }
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CViewDIBView diagnostics
  83. #ifdef _DEBUG
  84. void CViewDIBView::AssertValid() const
  85. {
  86. CScrollView::AssertValid();
  87. }
  88. void CViewDIBView::Dump(CDumpContext& dc) const
  89. {
  90. CScrollView::Dump(dc);
  91. }
  92. CViewDIBDoc* CViewDIBView::GetDocument() // non-debug version is inline
  93. {
  94. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CViewDIBDoc)));
  95. return (CViewDIBDoc*)m_pDocument;
  96. }
  97. #endif //_DEBUG
  98. /////////////////////////////////////////////////////////////////////////////
  99. // CViewDIBView message handlers
  100. LRESULT CViewDIBView::OnRealizePal(WPARAM wParam, LPARAM lParam)
  101. {
  102. ASSERT(wParam != NULL);
  103. CViewDIBDoc* pDoc = GetDocument();
  104. if (pDoc->m_pDib->IsEmpty())
  105. return 0L;  // must be a new document
  106. CPalette* pPal = pDoc->m_pDib->GetPalette();
  107. if (pPal != NULL)
  108. {
  109. CWnd* pAppFrame = AfxGetApp()->m_pMainWnd;
  110. CClientDC appDC(pAppFrame);
  111. // All views but one should be a background palette.
  112. // wParam contains a handle to the active view, so the SelectPalette
  113. // bForceBackground flag is FALSE only if wParam == m_hWnd (this view)
  114. CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);
  115. if (oldPalette != NULL)
  116. {
  117. UINT nColorsChanged = appDC.RealizePalette();
  118. if (nColorsChanged > 0)
  119. GetDocument()->UpdateAllViews(NULL);
  120. appDC.SelectPalette(oldPalette, TRUE);
  121. }
  122. else
  123. {
  124. TRACE0("tSelectPalette failed!n");
  125. }
  126. }
  127. return 0L;
  128. }