?? vcmat1doc.cpp
字號:
// VCmat1Doc.cpp : implementation of the CVCmat1Doc class
//
#include "stdafx.h"
#include "VCmat1.h"
#include "VCmat1Doc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVCmat1Doc
IMPLEMENT_DYNCREATE(CVCmat1Doc, CDocument)
BEGIN_MESSAGE_MAP(CVCmat1Doc, CDocument)
//{{AFX_MSG_MAP(CVCmat1Doc)
ON_COMMAND(ID_Menu_SaveAsMatFile, OnMenuSaveAsMatFile)
ON_COMMAND(ID_Menu_InPutFromMat, OnMenuInPutFromMat)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVCmat1Doc construction/destruction
CVCmat1Doc::CVCmat1Doc()
{int i,j;
m=5; n=10;
c_x=10.0;//////////變量
c_A=new double[n]; //////////一維數組
for(i=0;i<n;i++)c_A[i]=(double)i;
c_AB=new double*[m];for(i=0;i<m;i++)c_AB[i]=new double[n];//二維數組
for(i=0;i<m;i++)for(j=0;j<n;j++)c_AB[i][j]=(double)(i*j+1);
m_x=mxCreateDoubleMatrix(1,1,mxREAL);
*mxGetPr(m_x)=c_x;
m_A=mxCreateDoubleMatrix(1,n,mxREAL);
for(i=0;i<n;i++)*(mxGetPr(m_A)+i)=c_A[i];
m_AB=mxCreateDoubleMatrix(m,n,mxREAL);
for(i=0;i<m;i++)for(j=0;j<n;j++){*(mxGetPr(m_AB)+j*m+i)=c_AB[i][j];}
}
CVCmat1Doc::~CVCmat1Doc()
{
delete c_A; ////////內存釋放
for(int i=0;i<m;i++)delete c_AB[i];delete c_AB;
}
BOOL CVCmat1Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CVCmat1Doc serialization
void CVCmat1Doc::Serialize(CArchive& ar)
{int i,j;
if (ar.IsStoring())
{
ar>>c_x;
for(i=0;i<n;i++)ar>>c_A[i];
for(i=0;i<m;i++)for(j=0;j<n;j++)ar>>c_AB[i][j];
}
else
{
ar<<c_x;
for(i=0;i<n;i++)ar<<c_A[i];
for(i=0;i<m;i++)for(j=0;j<n;j++)ar<<c_AB[i][j];
}
}
/////////////////////////////////////////////////////////////////////////////
// CVCmat1Doc diagnostics
#ifdef _DEBUG
void CVCmat1Doc::AssertValid() const
{
CDocument::AssertValid();
}
void CVCmat1Doc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CVCmat1Doc commands
void CVCmat1Doc::OnMenuSaveAsMatFile()
{
MATFile *pmat; CString str;
CFileDialog in(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Matlab Data File(*.mat)|*.mat",NULL);
if(in.DoModal()==IDOK){str=in.GetPathName();
if((pmat=matOpen(str,"w"))==(MATFile *)NULL)
{AfxMessageBox("Can't open Out MatFile");exit(0);}
Write_mxArray(pmat,"m_x",m_x);
Write_mxArray(pmat,"m_A",m_A);
Write_mxArray(pmat,"m_AB",m_AB);
matClose(pmat);
}
}
void CVCmat1Doc::OnMenuInPutFromMat()
{
MATFile *pmat; CString str;
CFileDialog in(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
," Matlab Data File(*.mat)|*.mat",NULL);
if(in.DoModal()==IDOK){str=in.GetPathName();
if((pmat=matOpen(str,"r"))==(MATFile *)NULL)
{AfxMessageBox("Can't open Out MatFile");exit(-1);}
Read_mxArray(pmat,"m_x");
Read_mxArray(pmat,"m_A");
Read_mxArray(pmat,"m_AB");
matClose(pmat);
}
}
mxArray *CVCmat1Doc::Read_mxArray(MATFile *pmat,const char *VariableName)
{ mxArray *out; CString str;
out=matGetVariable(pmat, VariableName);
str.Format("讀取變量:%s錯誤,返回", VariableName); ////定義提示信息
if(out==(mxArray *)NULL){ AfxMessageBox(str); return 0; }
return(out);////////////////////////////返回所讀取的變量
}
void CVCmat1Doc::Write_mxArray(MATFile *pmat, char *VariableName,mxArray *Variable)
{ CString str;
str.Format("寫入變量:%s錯誤,返回", VariableName); ////定義提示信息
if((matPutVariable(pmat,VariableName,Variable))!=0){AfxMessageBox(str);}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -