📄 inputwnd.cpp
字号:
// InputWnd.cpp : implementation file
//
#include "stdafx.h"
#include "bp.h"
#include "InputWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CInputWnd
IMPLEMENT_DYNAMIC(CInputWnd, CWnd)
CInputWnd::CInputWnd()
{
//背景色画刷
m_brBack.CreateSolidBrush (RGB(255,255,255));
//方块填充画刷
m_brSquare.CreateSolidBrush (RGB(255,0,0));
//网格线画刷
m_hPen.CreatePen (PS_SOLID,1,RGB(0,192,192));
m_bInitDraw=false;
//初始化输入矩阵
/**/
for(int i=0;i<LEN;i++)
for(int j=0;j<LEN;j++)
{
m_bArray[i][j]=false;
m_InputArray[i][j]=0;
}
}
CInputWnd::~CInputWnd()
{
/*
if(m_hFile!=INVALID_HANDLE_VALUE)
{
if (m_bTrain){
OVERLAPPED Overlapped={0};
DATA d;
memcpy(d.e ,e,sizeof(E)*10);
memcpy(&(d.WE),&WE,sizeof(WEIGHT));
//把训练过的权值写回文件
::WriteFile (m_hFile,&d,sizeof(DATA),NULL,&Overlapped);
}
::CloseHandle(m_hFile);
}
*/
}
BEGIN_MESSAGE_MAP(CInputWnd, CWnd)
//{{AFX_MSG_MAP(CInputWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
void CInputWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
//重绘信息
DrawInputWnd(&dc);
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
}
// 画出输入框架
bool CInputWnd::DrawInputWnd(CPaintDC *pDC)
{
CBrush *pOldBr=pDC->SelectObject (&m_brBack);
float sizeHeight=0.0;
float sizeWidth=0.0;
float newsize=0.0;
this->GetClientRect(&m_rectThis);
sizeHeight=m_rectThis.Height ()/LENF;//求出方块的长
float x=0.0;
sizeWidth=m_rectThis.Width ()/LENF;//方块的宽
float y=0.0;
int i,j;
if(m_bInitDraw==false){ //看方块是否已经被写上
for( i=0;i<LEN;i++)
{
for( j=0;j<LEN;j++)
{
m_rectArray[i][j].left =x;
m_rectArray[i][j].right =m_rectArray[i][j].left+sizeWidth;
m_rectArray[i][j].top =y;
m_rectArray[i][j].bottom =m_rectArray[i][j].top+sizeHeight ;
y=y+sizeHeight;
}
y=0.0;
x=x+sizeWidth;
}
m_bInitDraw=true;
}
pDC->Rectangle (&m_rectThis);
pDC->SelectObject (&m_hPen);
newsize=0;
for( i=0;i<=LEN;i++,newsize+=sizeHeight)
{
pDC->MoveTo (0,newsize);
pDC->LineTo (m_rectThis.Width (),newsize); //画背景网格
}
newsize=0;
for( i=0;i<=LEN;newsize+=sizeWidth,i++)
{
pDC->MoveTo (newsize,0);
pDC->LineTo (newsize,m_rectThis.Height ()); //画背景网格
}
pDC->SelectObject (&m_brSquare);
for( i=0;i<LEN;i++)
for( j=0;j<LEN;j++)
{
if(m_bArray[i][j]==true)
pDC->Rectangle (&m_rectArray[i][j]); //填充小方块
}
pDC->SelectObject (pOldBr);
return false;
}
void CInputWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
for(int i=0;i<LEN;i++)
{
for(int j=0;j<LEN;j++)
{
if(m_rectArray[i][j].PtInRect (point)&&m_bArray[i][j]==false)
{
m_bArray[i][j]=true;
this->InvalidateRect (&m_rectArray[i][j]);
break;
}
}
}
CWnd::OnLButtonDown(nFlags, point);
}
void CInputWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags==MK_LBUTTON)
{
for(int i=0;i<LEN;i++)
{
for(int j=0;j<LEN;j++)
{
if(m_rectArray[i][j].PtInRect (point)&&m_bArray[i][j]==false)
{
m_bArray[i][j]=true;
this->InvalidateRect (&m_rectArray[i][j]);
break;
}
}
}
}
CWnd::OnMouseMove(nFlags, point);
}
// 获取经过调整的输入层数值,或者样本数值
bool CInputWnd::GetInput(int index)
{
//////////////////////////////////////////////////////////////////////////////
/* 调整坐标使输入居中 */
int iLeft=LEN,iRight=0,iTop=LEN,iBottom=0;
int i,j,t;
for( i=0;i<LEN;i++)
{
for( j=0;j<LEN;j++)
{
if(m_bArray[i][j])
{
if (iTop>j)
iTop=j; //识别方阵的最左
if(iBottom<j)
iBottom=j; //方阵的最右
if(iLeft>i)
iLeft=i; //方阵的最上
if(iRight<i)
iRight=i; //方阵的最下
}
}
}
for( i=0;i<LEN;i++) //平移坐标
for( j=0;j<LEN;j++)
m_InputArray[i][j]=0;
int xMiddle=0,yMiddle=0;
xMiddle=(iRight-iLeft)/2+1;
yMiddle=(iBottom-iTop)/2+1;
iLeft=iLeft+xMiddle; //中间点的x
iTop=iTop+yMiddle; //中间点的y
int dx=iLeft-LEN/2; //求出坐标差
int dy=iTop-LEN/2; //求出坐标差
for( i=0;i<LEN;i++) //平移坐标
for( j=0;j<LEN;j++){
if(m_bArray[i][j])
m_InputArray[i-dx][j-dy]=1;
}
for( i=0;i<LEN;i++)
for( j=0;j<LEN;j++)
m_bArray[i][j]=false;
for( i=0;i<LEN;i++)
for( j=0;j<LEN;j++)
if(m_InputArray[i][j]==1)
m_bArray[i][j]=true;
this->Invalidate ();
return false;
}
// 初始化样本,如果存在文件信息从文件里面调入信息
bool CInputWnd::Initialization(void)
{
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -