ImageProcessingDoc.cpp
上传用户:wzyhdz
上传日期:2010-04-06
资源大小:164k
文件大小:4k
源码类别:

2D图形编程

开发平台:

Visual C++

  1. // ImageProcessingDoc.cpp : implementation of the CImageProcessingDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "ImageProcessing.h"
  5. #include "ImageProcessingDoc.h"
  6. #include "GlobalApi.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CImageProcessingDoc
  14. IMPLEMENT_DYNCREATE(CImageProcessingDoc, CDocument)
  15. BEGIN_MESSAGE_MAP(CImageProcessingDoc, CDocument)
  16. //{{AFX_MSG_MAP(CImageProcessingDoc)
  17. ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  18. ON_COMMAND(ID_FILE_RELOAD, OnFileReload)
  19. //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CImageProcessingDoc construction/destruction
  23. CImageProcessingDoc::CImageProcessingDoc()
  24. {
  25. // TODO: add one-time construction code here
  26. InitDocVariable();
  27. }
  28. CImageProcessingDoc::~CImageProcessingDoc()
  29. {
  30. FreeDocVariable();
  31. }
  32. BOOL CImageProcessingDoc::OnNewDocument()
  33. {
  34. if (!CDocument::OnNewDocument())
  35. return FALSE;
  36. // TODO: add reinitialization code here
  37. // (SDI documents will reuse this document)
  38. return TRUE;
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CImageProcessingDoc serialization
  42. void CImageProcessingDoc::Serialize(CArchive& ar)
  43. {
  44. m_pDibInit->Serialize(ar);
  45. if (ar.IsStoring())
  46. {
  47. // TODO: add storing code here
  48. }
  49. else
  50. {
  51. // TODO: add loading code here
  52. }
  53. }
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CImageProcessingDoc diagnostics
  56. #ifdef _DEBUG
  57. void CImageProcessingDoc::AssertValid() const
  58. {
  59. CDocument::AssertValid();
  60. }
  61. void CImageProcessingDoc::Dump(CDumpContext& dc) const
  62. {
  63. CDocument::Dump(dc);
  64. }
  65. #endif //_DEBUG
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CImageProcessingDoc commands
  68. int CImageProcessingDoc::InitDocVariable()
  69. {
  70. m_pDibInit = new CDib;
  71. // added by tanhc in 2002-7-30, used to test some function
  72. m_pDibTest = new CDib;
  73. m_nColorIndex = 0;
  74. //--------------------------------------------
  75. return 0;
  76. }
  77. int CImageProcessingDoc::FreeDocVariable()
  78. {
  79. delete m_pDibInit;
  80. m_pDibInit = NULL;
  81. // added by tanhc in 2002-7-30, used to test some function
  82. delete m_pDibTest ;
  83. m_pDibTest = NULL ;
  84. //--------------------------------------------
  85. return 0;
  86. }
  87. void CImageProcessingDoc::OnFileSaveAs() 
  88. {
  89. // TODO: Add your command handler code here
  90. CString strSaveFileType = "位图文件 (*.bmp;*.dib)|*.bmp; *.dib|All Files (*.*)|*.*||";
  91. CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSaveFileType);
  92. CFile fileOpen ;
  93. if( FileDlg.DoModal() == IDOK ) {
  94. if(!fileOpen.Open( FileDlg.GetPathName() , CFile::modeCreate|CFile::modeWrite )){
  95. AfxMessageBox("cannot create the file to save");
  96. return;
  97. }
  98. if( !m_pDibInit->Write( &fileOpen ) ){
  99. return;
  100. }
  101. fileOpen.Close();
  102. }
  103. }
  104. /*************************************************************************
  105.  *
  106.  * 函数名称:
  107.  *   OnFileReload()
  108.  *
  109.  * 输入参数:
  110.  *   无
  111.  * 
  112.  * 返回值:
  113.  *   无
  114.  *
  115.  * 说明:
  116.  *   该函数响应ID_FILE_RELOAD点击的消息,并重载DIB
  117.  *
  118.  *************************************************************************
  119.  */
  120. void CImageProcessingDoc::OnFileReload() 
  121. {
  122. // 判断当前图像是否已经被改动
  123. if (IsModified())
  124. {
  125. // 提示用户该操作将丢失所有当前的修改
  126. if (MessageBox(NULL, "重新打开图像将丢失所有改动!是否继续?", "系统提示", MB_ICONQUESTION | MB_YESNO) == IDNO)
  127. {
  128. // 用户取消操作,直接返回
  129. return;
  130. }
  131. }
  132. CFile file;
  133. CString strPathName;
  134. CFileException fe;
  135. strPathName = GetPathName();
  136. // 重新打开文件
  137. if( !file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
  138. {
  139. // 失败
  140. ReportSaveLoadException(strPathName, &fe, FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
  141. // 返回
  142. return;
  143. }
  144. // 更改光标
  145. BeginWaitCursor();
  146. // 重新读取图象
  147. if(!m_pDibInit->Read(&file)){
  148. // 恢复光标形状
  149.   EndWaitCursor();
  150.  
  151.    
  152.   // 返回
  153.   return;
  154. }
  155. // 初始化胀标记为FALSE
  156.   SetModifiedFlag(FALSE);
  157.  
  158.   // 刷新
  159.   UpdateAllViews(NULL);
  160.   
  161.   // 恢复光标形状
  162.   EndWaitCursor();
  163.   // 返回
  164.   return;
  165. }