ED256Doc.cpp
上传用户:tianjuedz
上传日期:2022-08-10
资源大小:2349k
文件大小:3k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. // ED256Doc.cpp : implementation of the CED256Doc class
  2. //
  3. #include "stdafx.h"
  4. #include "ED256.h"
  5. #include "ED256Doc.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CED256Doc
  13. IMPLEMENT_DYNCREATE(CED256Doc, CDocument)
  14. BEGIN_MESSAGE_MAP(CED256Doc, CDocument)
  15. //{{AFX_MSG_MAP(CED256Doc)
  16. // NOTE - the ClassWizard will add and remove mapping macros here.
  17. //    DO NOT EDIT what you see in these blocks of generated code!
  18. //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CED256Doc construction/destruction
  22. CED256Doc::CED256Doc() {
  23. m_hDIB = NULL;
  24. m_palDIB = NULL;
  25. }
  26. CED256Doc::~CED256Doc() {}
  27. BOOL CED256Doc::OnNewDocument() {
  28. if (!CDocument::OnNewDocument())
  29. return FALSE;
  30. // Just in case...
  31. m_hDIB = NULL;
  32. m_palDIB = NULL;
  33. return TRUE;
  34. }
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CED256Doc serialization
  37. void CED256Doc::Serialize(CArchive& ar) {
  38. if (ar.IsStoring()) {
  39. // TODO: add storing code here
  40. } else {
  41. // TODO: add loading code here
  42. }
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CED256Doc diagnostics
  46. #ifdef _DEBUG
  47. void CED256Doc::AssertValid() const {
  48. CDocument::AssertValid();
  49. }
  50. void CED256Doc::Dump(CDumpContext& dc) const {
  51. CDocument::Dump(dc);
  52. }
  53. #endif //_DEBUG
  54. BOOL CED256Doc::OnOpenDocument(LPCTSTR lpszPathName) {
  55. if (!CDocument::OnOpenDocument(lpszPathName))
  56. return FALSE;
  57. CFile file;
  58. if (!file.Open(lpszPathName, CFile::modeRead)) {
  59. AfxMessageBox("Problem opening file.");
  60. }
  61. m_hDIB = ::ReadDIBFile(file);
  62. InitDIBData();
  63. if (!m_hDIB) {
  64. AfxMessageBox("Error reading DIB section.");
  65. }
  66. return TRUE;
  67. }
  68. void CED256Doc::InitDIBData() {
  69. if (m_palDIB != NULL) {
  70. delete m_palDIB;
  71. m_palDIB = NULL;
  72. }
  73. if (m_hDIB == NULL) {
  74. return;
  75. }
  76. // Set up document size
  77. LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
  78. ::GlobalUnlock((HGLOBAL) m_hDIB);
  79. m_palDIB = new CPalette;
  80. if (m_palDIB == NULL) {
  81. ::GlobalFree((HGLOBAL) m_hDIB);
  82. m_hDIB = NULL;
  83. return;
  84. }
  85. if (::CreateDIBPalette(m_hDIB, m_palDIB) == NULL) {
  86. // DIB may not have a palette
  87. delete m_palDIB;
  88. m_palDIB = NULL;
  89. return;
  90. }
  91. }
  92. HDIB CED256Doc::GetHDIB() {
  93. return m_hDIB;
  94. }
  95. CPalette *CED256Doc::GetDocPalette() {
  96. return m_palDIB;
  97. }