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

📄 appleview.cpp

📁 (原创)研究生期间学习人工神经网张和遗传算法实现的简单的水果识别源码. 水果特征{0,0,1},{0,1,0},{1,0,0}代表{大,圆,光滑}
💻 CPP
字号:
// AppleView.cpp : CAppleView 类的实现
//

#include "stdafx.h"
#include "Apple.h"

#include "AppleDoc.h"
#include "AppleView.h"
#include ".\appleview.h"
#include "ChooseView.h"
#include "math.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#define ARROWLEN 15
#define ARROWCOEF 50
#define ARROWANGLE (3.1415926536 / 8)

//using namespace std;

// CAppleView

IMPLEMENT_DYNCREATE(CAppleView, CView)

BEGIN_MESSAGE_MAP(CAppleView, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
	//ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
	ON_WM_LBUTTONDBLCLK()
	ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

// CAppleView 构造/析构

CAppleView::CAppleView()
{
	// TODO: 在此处添加构造代码

}

CAppleView::~CAppleView()
{
}
//LRESULT CAppleView::OnMyMessage(WPARAM wParam, LPARAM lParam)
//{
//	MessageBox("全局");
//	CRect reccount,myrect;
//	myrect.SetRect(0,320,600,800);
//	InvalidateRect(&myrect,true);
//	
//	return 0;
//}

BOOL CAppleView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CAppleView 绘制

void CAppleView::OnDraw(CDC* pDC)
{
	CAppleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	int count;
	CString s,sw,str,strweight,stri,strj;
	pDC->TextOut(0,0,"训练的次数:");
	pDC->TextOut(440,310,"训练次数");
	pDC->TextOut(280,80,"输");
	pDC->TextOut(280,120,"出");
	

	//s.Format ("%d",this->GetDocument()->mycount);
	//pDC->TextOut (100,0,s);

	//画不变的地方
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
		{
			stri.Format ("%d",i);
			strj.Format ("%d",j);
			sw="输入层初始输入权值W["+stri+"]["+strj+"]= ";
			pDC->TextOut (0,60+20*(j+i*3),sw);
		}	
		//隐层
		for(int j=0;j<3;j++)
		{
			strj.Format ("%d",j);
			sw="隐含层初始输入权值W[0]["+strj+"]= ";
			pDC->TextOut (0,250+20*j,sw);
		}
		//画坐标系
		pDC->MoveTo(300,60);
		pDC->LineTo(300,300);
		pDC->LineTo(480,300);
		
		pDC->MoveTo(300,60);
		pDC->LineTo (297,70);
		pDC->MoveTo(300,60);
		pDC->LineTo (303,70);

		pDC->MoveTo(480,300);
		pDC->LineTo (470,297);
		pDC->MoveTo(480,300);
		pDC->LineTo (470,303);

		count=this->GetDocument()->mycount;

	
		if (pDoc->m_Sign&&	((CAppleApp*)AfxGetApp())->m_WNsign ==false)
		{
			CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
			CChooseView* pLV=(CChooseView*)pMF->m_WndSplitter.GetPane(0,0);
			pLV->go_one_step();
			//pDoc->m_Sign=false;
		}
		//定义更新区域
		//CRect reccount,myrect;
		//myrect.SetRect(185,60,250,300);
		//reccount.SetRect (100,0,120,20);

		//myrect.SetRect(185,60,250,300);
		/*if(pDoc->Success)
		{
			//画权重
			double max1=0,max2=0,max3=0;
				//训练的次数
				s.Format ("%d",count);
				pDC->TextOut (100,0,s);

				//输入层
				for(int i=0;i<3;i++)
					for(int j=0;j<3;j++)
					{
						strweight.Format ("%f",pDoc->inweight[i][j]);
						stri.Format ("%d",i);
						strj.Format ("%d",j);
						pDC->TextOut (185,60+20*(j+i*3),strweight);								
					}	
					//隐层
					for(int j=0;j<3;j++)
					{
						strweight.Format ("%f",pDoc->hdweight[j]);
						strj.Format ("%d",j);
						pDC->TextOut (185,250+20*j,strweight);
					}
					//strj.Format ("%d",h);
					//pDC->TextOut (185,250,strj);
					//		Sleep(1);
					//		InvalidateRect(&myrect,true);

					//RECT rctB = {185,60,250,306};	
					//PeekMessage( &msg, NULL, 0, 0, PM_REMOVE );
					////if( msg.message == WM_QUIT )
					////	break;
					//TranslateMessage( &msg );
					//DispatchMessage( &msg );
					//CPen newpen;
					//newpen.CreatePen (PS_SOLID,2,RGB(255,0,0));
					//CPen * pOldPen=(CPen*)pDC->SelectObject (&newpen);
					//pDC->SelectStockObject (NULL_BRUSH);

					CBrush newbrush;
					newbrush.CreateHatchBrush(6,RGB(255,0,0));
					CBrush * pOldpen=(CBrush*)pDC->SelectObject (&newbrush);

					//	if (h%1000==0)
					//	{
					//pDC->Ellipse (380-h/1000*10,250-h/1000*10,390-h/1000*10,260-h/1000*10);		
					//pDC->SetPixel(h/20+320,h/100+200,RGB(255,0,0));
					//double ratio=1;

					//if(pDoc->lastout[h][0]>max1)
					//{
					//	max1=pDoc->lastout[h][0];
					//	pDC->SetPixel((h+1)/50+300,280-max1*200,RGB(255,0,0));
					//}
	

					//if(pDoc->lastout[h][1]>max2)
					//{
					//	max2=pDoc->lastout[h][1];
					//	pDC->SetPixel((h+1)/50+300,340-max2*200,RGB(0,0,0));						
					//}

					//if(pDoc->lastout[h][2]>max3)
					//{
					//	max3=pDoc->lastout[h][2];
					//	pDC->SetPixel((h+1)/50+300,380-max3*200,RGB(0,0,255));
					//}


					//	CString g;
					////	MessageBox("stop");
					//	g.Format ("%d",pDoc->lastout[pDoc->outnumber]);		
					//	pDC->TextOut (300,400,g);
					//	pDoc->outnumber++;
					//}

			
			//画点
			//380 250
			//CPen newpen;
			//newpen.CreatePen (PS_SOLID,2,RGB(255,0,0));
			//CPen * pOldPen=(CPen*)pDC->SelectObject (&newpen);
			//pDC->SelectStockObject (NULL_BRUSH);

			//pDC->Ellipse (380,250,390,260);
			//pDC->Ellipse (390,270,410,290);
			//pDC->SelectObject (pOldPen);

			pDoc->Success=false;
			//	delete  pDoc->inweight;
			//	delete  pDoc->hdweight;

		}
		else	//开始时的输出
		{
			//训练的次数
			s.Format ("%d",count);
			pDC->TextOut (100,0,s);

			for(int i=0;i<3;i++)
				for(int j=0;j<3;j++)
				{
					strweight.Format ("%f",pDoc->inweight[i][j]);
					stri.Format ("%d",i);
					strj.Format ("%d",j);
					pDC->TextOut (185,60+20*(j+i*3),strweight);				
				}


				for(int j=0;j<3;j++)
				{
					strweight.Format ("%f",pDoc->hdweight[j]);
					strj.Format ("%d",j);
					pDC->TextOut (185,250+20*j,strweight);
				}

				//想保存当前的曲线,但没有成功
				CRect reccount,myrect;
				myrect.SetRect(0,1,0,1);
				InvalidateRect(&myrect,false);	

				//画点不动
				double max1=0,max2=0,max3=0;
				for(int h=0;h<=count;h++)
				{
					if(pDoc->lastout[h][0]>max1)
					{
						max1=pDoc->lastout[h][0];
						pDC->SetPixel((h+1)/50+300,280-max1*200,RGB(255,0,0));
					}
	

					if(pDoc->lastout[h][1]>max2)
					{
						max2=pDoc->lastout[h][1];
						pDC->SetPixel((h+1)/50+300,340-max2*200,RGB(0,0,0));						
					}

					if(pDoc->lastout[h][2]>max3)
					{
						max3=pDoc->lastout[h][2];
						pDC->SetPixel((h+1)/50+300,380-max3*200,RGB(0,0,255));
					}
				}
		}

*/
		//pDoc->wout 
		if (pDoc->m_Sign&&	((CAppleApp*)AfxGetApp())->m_WNsign ==true)
		{
				CString theResult;
				theResult="识别的结果是:"+pDoc->m_jieguo;
				if(pDoc->gotorec)
					pDC->TextOut (0,340,theResult);
				// TODO: 在此处为本机数据添加绘制代码

				drawpic(pDoc->jieguo);		//画出水果的形状
		}
		((CAppleApp*)AfxGetApp())->m_WNsign =false;
}

void CAppleView::drawpic (int i)
{
	pdc=GetDC();

	switch(i)
	{
	case 100:		//苹果
		{
			//CPen pen1;
			//pen1.CreatePen (PS_SOLID,2,RGB(255,0,0));
			//CPen * pOldPen=(CPen*)pdc->SelectObject (&pen1);
			//pdc->Ellipse (130,316,150,336);	

			CBitmap Bmp;
			Bmp.LoadBitmap(IDB_BMP_APPLE);
			CDC memDC;
			memDC.CreateCompatibleDC(pdc);
			memDC.SelectObject (&Bmp);
			pdc->BitBlt(140,320,400,400,&memDC,0,0,SRCCOPY);
			break;
		}
	case 50:	//桔子
		{
			//CPen pen1;
			//pen1.CreatePen (PS_SOLID,2,RGB(255,255,0));
			//CPen * pOldPen=(CPen*)pdc->SelectObject (&pen1);
			//pdc->Ellipse (150,326,160,336);

			CBitmap Bmp;
			Bmp.LoadBitmap(IDB_BMP_JU);
			CDC memDC;
			memDC.CreateCompatibleDC(pdc);
			memDC.SelectObject (&Bmp);
			pdc->BitBlt(140,320,400,400,&memDC,0,0,SRCCOPY);
			break;
		}
	case 25:  //海棠
		{
			//CPen pen1;
			//pen1.CreatePen (PS_SOLID,2,RGB(255,0,0));
			//CPen * pOldPen=(CPen*)pdc->SelectObject (&pen1);
			//pdc->Ellipse (145,321,155,331);	
			CBitmap Bmp;
			Bmp.LoadBitmap(IDB_BMPHAI);
			CDC memDC;
			memDC.CreateCompatibleDC(pdc);
			memDC.SelectObject (&Bmp);
			pdc->BitBlt(140,320,400,400,&memDC,0,0,SRCCOPY);
			break;
		}
	}
	ReleaseDC(pdc);
}

// CAppleView 打印

BOOL CAppleView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CAppleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印前添加额外的初始化
}

void CAppleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印后添加清除过程
}


// CAppleView 诊断

#ifdef _DEBUG
void CAppleView::AssertValid() const
{
	CView::AssertValid();
}

void CAppleView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CAppleDoc* CAppleView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAppleDoc)));
	return (CAppleDoc*)m_pDocument;
}
#endif //_DEBUG


// CAppleView 消息处理程序

void CAppleView::OnInitialUpdate()
{
	CView::OnInitialUpdate();
}


void CAppleView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_MousePos.x =point.x;
	m_MousePos.y =point.y;
	CString s,sx,sy;
	s.Format ("%d ",m_MousePos.x);
	sy.Format ("%d ",m_MousePos.y);
	s+=sy;
	MessageBox(s);
	CView::OnLButtonDblClk(nFlags, point);
}

BOOL CAppleView::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	

//return true;
	return CView::OnEraseBkgnd(pDC);
}

⌨️ 快捷键说明

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