⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdlg.cpp

📁 VISUAL C++与MATLAB实现混合编程源代码
💻 CPP
字号:
// SDlg.cpp : implementation file
//

#include "stdafx.h"
#include "lm.h"
#include "SDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSDlg dialog


CSDlg::CSDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSDlg)
	m_numinput = 0;
	m_nummiddle = 0;
	m_numoutput = 0;
	m_outpre = _T("");
	m_numpre = _T("");
	//}}AFX_DATA_INIT
}


void CSDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSDlg)
	DDX_Control(pDX, IDC_NUM_PRE, m_edit);
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Control(pDX, IDC_SPIN3, m_spinout);
	DDX_Control(pDX, IDC_SPIN2, m_spinmiddle);
	DDX_Control(pDX, IDC_SPIN1, m_spinin);
	DDX_Control(pDX, IDC_FUN_OUT, m_funout);
	DDX_Control(pDX, IDC_FUN_IN, m_funin);
	DDX_Text(pDX, IDC_NUM_INPUT, m_numinput);
	DDX_Text(pDX, IDC_NUM_MIDDLE, m_nummiddle);
	DDX_Text(pDX, IDC_NUM_OUTPUT, m_numoutput);
	DDX_Text(pDX, IDC_OUT_PRE, m_outpre);
	DDX_Text(pDX, IDC_NUM_PRE, m_numpre);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSDlg, CDialog)
	//{{AFX_MSG_MAP(CSDlg)
	ON_COMMAND(ID_SIMU, OnSimu)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_SHOW, OnShow)
	ON_BN_CLICKED(IDC_SIMU, OnSimu)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSDlg message handlers

BOOL CSDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_numinput=7;
	m_nummiddle=28;
	m_numoutput=1;
	m_spinin.SetRange(1,100);
	m_spinmiddle.SetRange(1,100);
	m_spinout.SetRange(1,100);
	m_funin.SetCurSel(0);
	m_funout.SetCurSel(0);
	m_list.InsertColumn(0,"序号",LVCFMT_LEFT,80,-1);
	m_list.InsertColumn(1,"数据",LVCFMT_LEFT,160,-1);
	
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	// TODO: Add extra initialization here
	UpdateData(FALSE);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSDlg::OnSimu() 
{
	// TODO: Add your command handler code here
	//输入输出节点数;
   double n[3];
   n[0]=m_numinput;
   n[1]=m_numoutput;
   n[2]=m_nummiddle;
   COleVariant np;
   np.vt=VT_R8|VT_ARRAY;
   SAFEARRAYBOUND npbound[1]={3,0};
   np.parray=SafeArrayCreate(VT_R8,1,npbound);
   np.parray->pvData=n;
   //函数类型
   int curitem=m_funin.GetCurSel();
   CString funin;
   if(curitem==0)
	   funin="purelin";
   else if(curitem==1)
	   funin="tansig";
   else if(curitem==2)
	   funin="logsig";
   COleVariant infun=funin;

   CString funout;
   curitem=m_funout.GetCurSel();
   if(curitem==0)
	   funout="purelin";
   else if(curitem==1)
	   funout="tansig";
   else if(curitem==2)
	   funout="logsig";
   COleVariant outfun=funout;
   //模型名和目录
   COleVariant ModelNo="1";
   //CString name=AfxGetApp()->;
  // Directory name;
  // TCHAR szCurPath[100];
// memset(szCurPath, 0,100);
  CString dir;
  GetModuleFileName(NULL,dir.GetBuffer(100),100);
  dir.ReleaseBuffer();
  dir.TrimRight();
  dir=dir.Left(dir.GetLength()-6)+"demo";

  COleVariant dirname=dir;



   

 //  COleVariant dirname="D:\\Program Files\\Microsoft Visual Studio\\MyProjects\\lm\\Demo";
   //预测数据
   //检测长度
   int numpre=m_list.GetItemCount();
   if(numpre!=m_numinput)
	  { MessageBox("输入预测数据的个数不对,确认");return;}
   double s[7];
   for(int i=0;i<numpre;i++)
	   s[i]=atof(m_list.GetItemText(i,1));
   COleVariant sp;
   sp.vt=VT_R8|VT_ARRAY;
   SAFEARRAYBOUND spbound[1]={7,0};
   sp.parray=SafeArrayCreate(VT_R8,1,spbound);
   sp.parray->pvData=s;
   //输出设置
   COleVariant ret;
   //调用NNTOOLKIT


   	if(!nn.CreateDispatch("nnToolKit.nnToolKit.1_0"))
	{
		MessageBox("没有联结");
		exit(-1);
	}

	nn.lmsimu(1,&ret,ModelNo,np,sp,infun,outfun,dirname);
   nn.ReleaseDispatch();
   double result=ret.dblVal;
   m_outpre.Format("%f",result);
   MessageBox("仿真成功");



}

void CSDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
//	double madd=atoi(m_numpre);
	//检测数据有效性
	if(m_numpre.IsEmpty())
	{	MessageBox("输入数据无效");return;}
	int strlen=m_numpre.GetLength();
	for(int i=0;i<strlen;i++)
	{char curchar=m_numpre.GetAt(i);
		if(!(curchar>='0'&&curchar<='9'||curchar=='.'))
		{MessageBox(" 输入数据无效");
		m_numpre.Empty();
		UpdateData(FALSE);
		return;
		}

	}
	int nextitem=m_list.GetItemCount();
	CString str;
		str.Format("%d",nextitem+1);
	m_list.InsertItem(nextitem,str);
	m_list.SetItemText(nextitem,1,m_numpre);
	m_numpre.Empty();
	m_edit.SetFocus();
	UpdateData(FALSE);
}

void CSDlg::OnShow() 
{
	// TODO: Add your control notification handler code here
	UpdateData(FALSE);
	return;
}

void CSDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	m_list.DeleteAllItems();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -