📄 sdlg.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 + -