📄 drawview.cpp
字号:
// 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 + -