ImageProcessingDoc.cpp
上传用户:piaozanzhu
上传日期:2008-02-14
资源大小:212k
文件大小:4k
源码类别:

图形图像处理

开发平台:

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. //--------------------------------------------
  74. return 0;
  75. }
  76. int CImageProcessingDoc::FreeDocVariable()
  77. {
  78. delete m_pDibInit;
  79. m_pDibInit = NULL;
  80. // added by tanhc in 2002-7-30, used to test some function
  81. delete m_pDibTest ;
  82. m_pDibTest = NULL ;
  83. //--------------------------------------------
  84. return 0;
  85. }
  86. void CImageProcessingDoc::OnFileSaveAs() 
  87. {
  88. // TODO: Add your command handler code here
  89. CString strSaveFileType = "位图文件 (*.bmp;*.dib)|*.bmp; *.dib|All Files (*.*)|*.*||";
  90. CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSaveFileType);
  91. CFile fileOpen ;
  92. if( FileDlg.DoModal() == IDOK ) {
  93. if(!fileOpen.Open( FileDlg.GetPathName() , CFile::modeCreate|CFile::modeWrite )){
  94. AfxMessageBox("cannot create the file to save");
  95. return;
  96. }
  97. if( !m_pDibInit->Write( &fileOpen ) ){
  98. return;
  99. }
  100. fileOpen.Close();
  101. }
  102. }
  103. /*************************************************************************
  104.  *
  105.  * 函数名称:
  106.  *   OnFileReload()
  107.  *
  108.  * 输入参数:
  109.  *   无
  110.  * 
  111.  * 返回值:
  112.  *   无
  113.  *
  114.  * 说明:
  115.  *   该函数响应ID_FILE_RELOAD点击的消息,并重载DIB
  116.  *
  117.  *************************************************************************
  118.  */
  119. void CImageProcessingDoc::OnFileReload() 
  120. {
  121. // 判断当前图像是否已经被改动
  122. if (IsModified())
  123. {
  124. // 提示用户该操作将丢失所有当前的修改
  125. if (MessageBox(NULL, "重新打开图像将丢失所有改动!是否继续?", "系统提示", MB_ICONQUESTION | MB_YESNO) == IDNO)
  126. {
  127. // 用户取消操作,直接返回
  128. return;
  129. }
  130. }
  131. CFile file;
  132. CString strPathName;
  133. CFileException fe;
  134. strPathName = GetPathName();
  135. // 重新打开文件
  136. if( !file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
  137. {
  138. // 失败
  139. ReportSaveLoadException(strPathName, &fe, FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
  140. // 返回
  141. return;
  142. }
  143. // 更改光标
  144. BeginWaitCursor();
  145. // 重新读取图象
  146. if(!m_pDibInit->Read(&file)){
  147. // 恢复光标形状
  148.   EndWaitCursor();
  149.  
  150.    
  151.   // 返回
  152.   return;
  153. }
  154. // 初始化胀标记为FALSE
  155.   SetModifiedFlag(FALSE);
  156.  
  157.   // 刷新
  158.   UpdateAllViews(NULL);
  159.   
  160.   // 恢复光标形状
  161.   EndWaitCursor();
  162.   // 返回
  163.   return;
  164. }