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

📄 drawview.cpp

📁 功能进化对于设计人员来说有着及其重要的作用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// drawView.cpp : implementation file
//

#include "stdafx.h"
#include "duoshi2.h"
#include "drawView.h"
#include "LeftPaneView.h"
#include "duoshi2Doc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "fhf.h"
#include "swf.h"
#include "guanxidlg.h"
#include "amountdlg.h"
#include "math.h"
#include "wodeguanxidlg.h"



/////////////////////////////////////////////////////////////////////////////
// CdrawView

IMPLEMENT_DYNCREATE(CdrawView, CScrollView)

CdrawView::CdrawView()
{    hi=0;
    vi=0;
	I=50; 
	J=0;
	K=0;
	M=0;
	N=0;
    ZHI=0;
	T=1;
	Q=0;
	jj=0;
	GUANXI=1;
	 BIAOZHI=1;
	 BIAOZHI2=2;
	 wenzhi="";

/*	point1[0].x=40;
	point1[0].y=40;//此数组为存储可用来进化的方框数据
	point2[0].x=40;//此数组为存储所有方框数据
	point2[0].y=40;*/
	for(int i=50;i<100;i++)
	{point1[i].x=0;
     point1[i].y=0;
     point2[i].x=0;
     point2[i].y=0;
    
	}


	for(int j=0;j<50;j++)
	{
		 point33[j].x=0;
     point33[j].y=0;
	}


	m_dcMetaFile.Create();

	




}
CdrawView::~CdrawView()
{
}

CDuoshi2Doc* CdrawView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDuoshi2Doc)));
	return (CDuoshi2Doc*)m_pDocument;
}
BEGIN_MESSAGE_MAP(CdrawView, CScrollView)
	//{{AFX_MSG_MAP(CdrawView)
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_TEST, OnTest)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_BUTTON001, OnButton001)
	ON_COMMAND(ID_BUTTON002, OnButton002)
	ON_COMMAND(ID_BUTTON003, OnButton003)
	ON_COMMAND(ID_BUTTON004, OnButton004)
	ON_COMMAND(ID_BUTTON005, OnButton005)
	ON_COMMAND(ID_BUTTON006, OnButton006)
	ON_COMMAND(ID_BUTTON007, OnButton007)
	ON_COMMAND(ID_BUTTON008, OnButton008)
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_Evolution, OnEvolution)
	ON_WM_RBUTTONDOWN()
	ON_WM_PAINT()
	ON_COMMAND(ID_SADFA, OnSadfa)
	ON_COMMAND(ID_ASFASF, OnAsfasf)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_BUTTON_relation, OnBUTTONrelation)
	ON_COMMAND(ID_BUTTON_begain, OnBUTTONbegain)
	ON_COMMAND(ID_BUTTON_relation2, OnBUTTONrelation2)
	ON_COMMAND(ID_BUTTON_relation3, OnBUTTONrelation3)
	ON_COMMAND(ID_BUTTON_relation4, OnBUTTONrelation4)
	ON_COMMAND(ID_BUTTON_relation5, OnBUTTONrelation5)
	ON_WM_VSCROLL()
	ON_WM_HSCROLL()
	ON_WM_CANCELMODE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CdrawView drawing

void CdrawView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

/*	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);*/
	CSize sizeTotal(5000,5000);
	CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
	CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);
	SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);



}

void CdrawView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
	// TODO: add draw code here


    HMETAFILE hmetaFile;
	hmetaFile=m_dcMetaFile.Close();
	pDC->PlayMetaFile(hmetaFile);
	m_dcMetaFile.Create();
	m_dcMetaFile.PlayMetaFile(hmetaFile);
	DeleteMetaFile(hmetaFile);

}

/////////////////////////////////////////////////////////////////////////////
// CdrawView diagnostics

#ifdef _DEBUG
void CdrawView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CdrawView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CdrawView message handlers

BOOL CdrawView::OnEraseBkgnd(CDC* pDC) 
{
/*	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP2);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
	GetClientRect(&rect);
	
	pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
	return TRUE;*/
return CView::OnEraseBkgnd(pDC);
}


void CdrawView::Line01(int x1,int y1,int x2,int y2)
{
    CDuoshi2App* app=(CDuoshi2App*)AfxGetApp();
	CClientDC dc(this);
	CPen pen(app->m_nLineStyle,app->m_nLineWidth,app->m_clr);
	dc.SelectObject(&pen);
	dc.MoveTo(x1,y1);
	m_dcMetaFile.MoveTo(x1,y1);
	dc.LineTo(x2,y2);
	m_dcMetaFile.LineTo(x2,y2);


}	

//DEL void CdrawView::OnFunctionDeployment() 
//DEL {
//DEL 
//DEL Line0(200,100,800,600);	
//DEL Invalidate();
//DEL 
//DEL }

void CdrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{	
    //Line0(200,100,800,600);
	CScrollView::OnLButtonUp(nFlags, point);
}

//DEL BOOL CdrawView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
//DEL {
//DEL 
//DEL 	return CScrollView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
//DEL }

void CdrawView::OnTest() 
{

/*	CDuoshi2Doc* pDoc =GetDocument();
	ASSERT_VALID(pDoc);
	pview1=&pDoc->pview;
	CString dd;
	dd.Format("%d",pview1->num_child);
	MessageBox(dd);

*/
	/*CString xx;
	xx.Format("%d",num_child);
	MessageBox(xx);
*/
	
/*	MessageBox(fatherD);
	for(int i=0;i<num_child;i++)
	{
	MessageBox(sunD[i]);
	}

	for(int j=0;j<num_child;j++)
		for(int t=0;t<num_grand[j];t++)              //树的遍历
		{
			{
			MessageBox(grandD[j][t]);
			}
		}
*/	
CDC* pDC=GetDC();
FillRect0(pDC,RGB(255,255,255),(0,0),2000,2000);

/*if(sunD[0]=="")
{
	MessageBox("please input the function in the tree and save it");
}

else{
	FANGKUANG2(330,20,140,55);
	textout(330,20,25,10,fatherD);
	Line01(400,75,400,100);
	Line01(100,100,700,100);
	for(int m=0;m<num_child;m++)
	{
		Line01(100+(int)(600/(num_child-1))*m,100,100+(int)(600/(num_child-1))*m,125);
        FANGKUANG2(100+(int)(600/(num_child-1))*m-15,125,30,100);
        textout2(100+(int)(600/(num_child-1))*m-15,125,5,10,sunD[m]);
		if(grandD[m][0]!="")
		{
          
			Line01(100+(int)(600/(num_child-1))*m,225,100+(int)(600/(num_child-1))*m,250);
			Line01(100+(int)(600/(num_child-1))*m-50,250,100+(int)(600/(num_child-1))*m+50,250);
            for(int n=0;n<num_grand[m];n++)
			{
	Line01(50+(int)(600/(num_child-1))*m+(int)(100/(num_grand[m]-1))*n,250,50+(int)(600/(num_child-1))*m+(int)(100/(num_grand[m]-1))*n,275);
           FANGKUANG2(50+(int)(600/(num_child-1))*m+(int)(100/(num_grand[m]-1))*n-15,275,30,100);
		   textout2(50+(int)(600/(num_child-1))*m+(int)(100/(num_grand[m]-1))*n-15,275,5,10,grandD[m][n]);
			}

		}
	}

	
}*/





if(sunD[0]=="")
{
	FANGKUANG2(20,500,120,40);
	textout(20,500,25,10,fatherD);
    MessageBox("please save the tree first!");
}
else{
    FANGKUANG2(20,500,120,40);
	textout(20,500,25,10,fatherD);
    Line01(140,520,165,520);
	Line01(165,220,165,820);
	for(int m=0;m<num_child;m++)
	{
	
		Line01(165,220+(int)(600/(num_child-1))*m,190,220+(int)(600/(num_child-1))*m);
        FANGKUANG2(190,220+(int)(600/(num_child-1))*m-15,100,30);
        textout(190,220+(int)(600/(num_child-1))*m-15,5,5,sunD[m]);
		if(grandD[m][0]!="")
		{
          
			Line01(290,220+(int)(600/(num_child-1))*m,315,220+(int)(600/(num_child-1))*m);
			Line01(315,220+(int)(600/(num_child-1))*m-60,315,220+(int)(600/(num_child-1))*m+60);
            for(int n=0;n<num_grand[m];n++)
			{
           	Line01(315,220+(int)(600/(num_child-1))*m-60+(int)(120/(num_grand[m]-1))*n,340,220+(int)(600/(num_child-1))*m-60+(int)(120/(num_grand[m]-1))*n);
			FANGKUANG2(340,220+(int)(600/(num_child-1))*m-60+(int)(120/(num_grand[m]-1))*n-12,100,20);
			textout(340,220+(int)(600/(num_child-1))*m-60+(int)(120/(num_grand[m]-1))*n-10,12,0,grandD[m][n]);
	
	
	
			}

		}
	}
}
}
void CdrawView::FANGKUANG2(int x1,int y1,int length,int width)
{
   
Line01(x1,y1,x1+length,y1);
Line01(x1,y1,x1,y1+width);
Line01(x1+length,y1,x1+length,y1+width);
Line01(x1,y1+width,x1+length,y1+width);
	


}

void CdrawView::textout(int x,int y,int xd,int yd,CString str) //横着输出文本
{
 CDuoshi2App* app=(CDuoshi2App*)AfxGetApp();
	CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);//设置背景为透明
dc.SetTextColor(app->m_clr);//设置字体颜色
dc.TextOut(x+xd,y+yd,str);
m_dcMetaFile.TextOut(x+xd,y+yd,str);
}



void CdrawView::textout2(int x,int y,int xd,int yd,CString str) //竖着输出文本
{

 CDuoshi2App* app=(CDuoshi2App*)AfxGetApp();	
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);//设置背景为透明
dc.SetTextColor(app->m_clr);//设置字体颜色
dc.DrawText(str,   CRect(x+xd,  y+yd,   x+xd+1,   y+yd+1),   DT_TOP|DT_WORDBREAK|DT_NOCLIP); 
m_dcMetaFile.DrawText(str,   CRect(x+xd,  y+yd,   x+xd+1,   y+yd+1),   DT_TOP|DT_WORDBREAK|DT_NOCLIP); 
}





//以下为新添加的函数:


//画直线
void CdrawView::Line0(CDC* pDC,int x1,int y1,int x2,int y2,int siwid,COLORREF sicol)
//输入起始点,线宽,直线颜色为RGB格式,如:RGB(1,1,2)。切记在调用函数时不要少了反括号“)”
{

	CPen siPen;
CPen* PPen;
siPen.CreatePen(PS_SOLID,siwid,sicol);
PPen=pDC->SelectObject(&siPen);

pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
m_dcMetaFile.MoveTo(x1,y1);
m_dcMetaFile.LineTo(x2,y2);
pDC->SelectObject(PPen);
siPen.DeleteObject();
}

//画方框
void CdrawView::FANGKUANG(CDC* pDC,int x1,int y1,int wid,COLORREF sicol)
//输入矩形左上点及颜色;
{  Line0(pDC,x1,y1,x1+100,y1,wid,sicol);
   Line0(pDC,x1+100,y1,x1+100,y1+30,wid,sicol);
   Line0(pDC,x1+100,y1+30,x1,y1+30,wid,sicol);
   Line0(pDC,x1,y1+30,x1,y1,wid,sicol);
}

//画圆:输入圆心,半径,填充类型;
void CdrawView::myyuan(CDC* pDC,int x0,int y0,int r,int brush)
{
pDC->SelectStockObject(brush);
m_dcMetaFile.SelectStockObject(brush);
pDC->Ellipse(x0-r,y0-r,x0+r,y0+r);
m_dcMetaFile.Ellipse(x0-r,y0-r,x0+r,y0+r);
}


//圆弧
void CdrawView::YUANHU(CDC* pDC,int x1,int y1,int x2,int y2)
{ 
double X0,Y0,R,T,Q,x,y,K,x3,y3,x4,y4;
R=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));  
       if(x1!=x2){
Q=180*atan((y2-y1)/(x2-x1));  }
                     //if(x1!=x2){Q=180*atan(abs(y1-y2)/abs(x1-x2));}
X0=(x1+x2)/2-0.866*(y2-y1);//圆心坐标
Y0=(y1+y2)/2+0.866*(x2-x1);//圆心坐标
x=(x1+x2)/2+0.134*(y2-y1);//圆弧段中点坐标
y=(y1+y2)/2-0.134*(x2-x1);//圆弧段中点坐标
T=0.5;

⌨️ 快捷键说明

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