📄 databaseview.cpp
字号:
// databaseView.cpp : implementation of the CDatabaseView class
//
#include "stdafx.h"
#include "database.h"
#include "databaseDoc.h"
#include "databaseView.h"
#include "Attribute.h"
#include "Entity.h"
#include "Relation.h"
#include "Dialog1.h"
#include "Dialog2.h"
#include "Dialog3.h"
#include "Dialog4.h"
#include "Dialog5.h"
#include "change.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
MyEntity* my1;
MyEntity* my2;
Relation* my3;
int count=0;
int count1=0;
int start=0;
int flag=0;
int newflag=0;
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView
IMPLEMENT_DYNCREATE(CDatabaseView, CView)
BEGIN_MESSAGE_MAP(CDatabaseView, CView)
//{{AFX_MSG_MAP(CDatabaseView)
ON_COMMAND(IDM_RESIZE, OnResize)
ON_COMMAND(IDM_RELATION2, OnRelation2)
ON_COMMAND(IDM_RELATION1, OnRelation1)
ON_COMMAND(IDM_ENTITY2, OnEntity2)
ON_COMMAND(IDM_ENTITY1, OnEntity1)
ON_COMMAND(IDM_DELETE, OnDelete)
ON_COMMAND(IDM_ATTRIBUTE1, OnAttribute1)
ON_COMMAND(IDM_ATTRIBUTE2, OnAttribute2)
ON_COMMAND(IDM_ATTRIBUTE3, OnAttribute3)
ON_COMMAND(IDM_CHANGE, OnChange)
ON_COMMAND(IDM_RENAME, OnRename)
ON_COMMAND(ID_POP, OnPop)
//}}AFX_MSG_MAP
// Standard printing commands
ON_WM_MOUSEMOVE()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView construction/destruction
CDatabaseView::CDatabaseView()
{
// TODO: add construction code here
p1=new CPoint();
p2=new CPoint();
}
CDatabaseView::~CDatabaseView()
{
}
BOOL CDatabaseView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
BOOL CDatabaseView::OnEraseBkgnd(CDC* pDC)
{
return true;
}
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView drawing
void CDatabaseView::OnDraw(CDC* pDC)
{
CDatabaseDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rc;
GetClientRect(&rc);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255));
pDoc->diagram->paint(MemDC);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDoc->DeleteContents();
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView printing
BOOL CDatabaseView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDatabaseView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDatabaseView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView diagnostics
#ifdef _DEBUG
void CDatabaseView::AssertValid() const
{
CView::AssertValid();
}
void CDatabaseView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDatabaseDoc* CDatabaseView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDatabaseDoc)));
return (CDatabaseDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView message handlers
void CDatabaseView::OnLButtonDown(UINT nFlags , CPoint Point)
{
CDatabaseDoc* pDoc = GetDocument();
CDC *g=this->GetDC();
int x1=Point.x-40;
int y1=Point.y-20;
int x2=Point.x+40;
int y2=Point.y+20;
if(pDoc->diagram->selected!=NULL&&flag==2)
{
start=1;
return;
}
if(flag==0||flag==1)
{
flag=0;
pDoc->diagram->selected=NULL;
Element* first=pDoc->diagram->firstElement;
while(first!=NULL)
{
first->selecting=0;
first=first->nextelement;
}
first=pDoc->diagram->firstElement;
while(first!=NULL)
{
if(first->isselected(&Point))
{
first->selecting=1;
pDoc->diagram->selected=first;
flag=1;
break;
}
first=first->nextelement;
}
}
if(flag>=3)
{
p1->x=Point.x;
p1->y=Point.y;
p2->x=Point.x;
p2->y=Point.y;
start=1;
return;
}
this->Invalidate(true);
}
//////////////////////////////////////////////////////////////////
void CDatabaseView::OnRButtonDown(UINT nFlags , CPoint Point)
{
CDatabaseDoc* pDoc = GetDocument();
if(pDoc->diagram->selected==NULL)
{
return;
}
if(pDoc->diagram->selected->isselected(&Point)==1)
{
ClientToScreen(&Point);
CMenu pop;
pop.LoadMenu(IDR_MENU1);
pop.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,Point.x,Point.y,this);
}
else
{
pDoc->diagram->selected->selecting=0;
pDoc->diagram->selected=NULL;
start=0;
flag=0;
this->Invalidate(true);
}
}
//////////////////////////////////////////////////////////////////
void CDatabaseView::OnMouseMove(UINT nFlags, CPoint point)
{
CDatabaseDoc* pDoc = GetDocument();
if(flag==1)
{
if(pDoc->diagram->selected==NULL)
{
return;
}
else
{
int x1=pDoc->diagram->selected->getPoint1().x;
int y1=pDoc->diagram->selected->getPoint1().y;
int x2=pDoc->diagram->selected->getPoint2().x;
int y2=pDoc->diagram->selected->getPoint2().y;
int x11=x1+(point.x-(x1+x2)/2);
int x22=x2+(point.x-(x1+x2)/2);
int y11=y1+(point.y-(y1+y2)/2);
int y22=y2+(point.y-(y1+y2)/2);
pDoc->diagram->selected->setPoint1(x11,y11);
pDoc->diagram->selected->setPoint2(x22,y22);
this->Invalidate(true);
}
}
if(flag==2&&start==1)
{
if(pDoc->diagram->selected==NULL)
{
return;
}
else
{
int x1=point.x;
int y1=point.y;
pDoc->diagram->selected->setPoint2(x1,y1);
this->Invalidate(true);
}
}
if(flag==3&&start==1)
{
CPen pen(PS_SOLID,1,RGB(255,255,255));
CPen *oldpen;
CDC *g=this->GetDC();
oldpen=g->SelectObject(&pen);
g->Rectangle(p1->x,p1->y,p2->x,p2->y);
p2->x=point.x;
p2->y=point.y;
g->SelectObject(oldpen);
g->Rectangle(p1->x,p1->y,p2->x,p2->y);
g->DeleteDC();
}
if(flag==4&&start==1)
{
CPen pen(PS_SOLID,1,RGB(255,255,255));
CPen *oldpen;
CDC *g=this->GetDC();
oldpen=g->SelectObject(&pen);
g->Rectangle(p1->x,p1->y,p2->x,p2->y);
g->Rectangle(p1->x+5,p1->y+5,p2->x-5,p2->y-5);
p2->x=point.x;
p2->y=point.y;
g->SelectObject(oldpen);
g->Rectangle(p1->x,p1->y,p2->x,p2->y);
g->Rectangle(p1->x+5,p1->y+5,p2->x-5,p2->y-5);
g->DeleteDC();
}
if(flag==5&&start==1)
{
CPen pen(PS_SOLID,1,RGB(255,255,255));
CPen *oldpen;
CDC *g=this->GetDC();
oldpen=g->SelectObject(&pen);
CPoint *p=new CPoint[4];
p[0]=*(new CPoint(p1->x-5,(p1->y+p2->y)/2));
p[1]=*(new CPoint((p1->x+p2->x)/2,p1->y-5));
p[2]=*(new CPoint(p2->x+5,(p1->y+p2->y)/2));
p[3]=*(new CPoint((p1->x+p2->x)/2,p2->y+5));
g->Polygon(p,4);
p2->x=point.x;
p2->y=point.y;
g->SelectObject(oldpen);
p[0].y=(p1->y+p2->y)/2;
p[1].x=(p1->x+p2->x)/2;
p[2].x=p2->x+5;
p[2].y=(p1->y+p2->y)/2;
p[3].x=(p1->x+p2->x)/2;
p[3].y=p2->y+5;
g->Polygon(p,4);
g->DeleteDC();
}
if(flag==6&&start==1)
{
CPen pen(PS_SOLID,1,RGB(255,255,255));
CPen *oldpen;
CDC *g=this->GetDC();
oldpen=g->SelectObject(&pen);
CPoint *p=new CPoint[4];
p[0]=*(new CPoint(p1->x-5,(p1->y+p2->y)/2));
p[1]=*(new CPoint((p1->x+p2->x)/2,p1->y-5));
p[2]=*(new CPoint(p2->x+5,(p1->y+p2->y)/2));
p[3]=*(new CPoint((p1->x+p2->x)/2,p2->y+5));
g->Polygon(p,4);
p[0].x=p[0].x+5;
p[1].y=p[1].y+5;
p[2].x=p[2].x-5;
p[3].y=p[3].y-5;
g->Polygon(p,4);
p[0].x=p[0].x-5;
p[1].y=p[1].y-5;
p[2].x=p[2].x+5;
p[3].y=p[3].y+5;
p2->x=point.x;
p2->y=point.y;
g->SelectObject(oldpen);
p[0].y=(p1->y+p2->y)/2;
p[1].x=(p1->x+p2->x)/2;
p[2].x=p2->x+5;
p[2].y=(p1->y+p2->y)/2;
p[3].x=(p1->x+p2->x)/2;
p[3].y=p2->y+5;
g->Polygon(p,4);
p[0].x=p[0].x+5;
p[1].y=p[1].y+5;
p[2].x=p[2].x-5;
p[3].y=p[3].y-5;
g->Polygon(p,4);
g->DeleteDC();
}
if((flag==7||flag==8)&&start==1)
{
CPen pen(PS_SOLID,1,RGB(255,255,255));
CPen *oldpen;
CDC *g=this->GetDC();
oldpen=g->SelectObject(&pen);
g->Ellipse(p1->x,p1->y,p2->x,p2->y);
if(flag==8)
{
g->Ellipse(p1->x+5,p1->y+5,p2->x-5,p2->y-5);
}
g->SelectObject(oldpen);
p2->x=point.x;
p2->y=point.y;
g->Ellipse(p1->x,p1->y,p2->x,p2->y);
if(flag==8)
{
g->Ellipse(p1->x+5,p1->y+5,p2->x-5,p2->y-5);
}
g->DeleteDC();
}
if(flag==9&&start==1)
{
CPen pen(PS_DOT,1,RGB(255,255,255));
CPen pen2(PS_DOT,1,RGB(0,0,0));
CDC *g=this->GetDC();
g->SelectObject(&pen);
g->Ellipse(p1->x,p1->y,p2->x,p2->y);
g->SelectObject(&pen2);
p2->x=point.x;
p2->y=point.y;
g->Ellipse(p1->x,p1->y,p2->x,p2->y);
g->DeleteDC();
}
}
//////////////////////////////////////////////////////////////
void CDatabaseView::OnLButtonUp(UINT nFlags, CPoint point)
{
CDatabaseDoc* pDoc = GetDocument();
if(flag==3||flag==4)
{
CString s;
CDialog1 a=new CDialog1();
a.DoModal();
s=a.m_entityname1;
if(s==""||
(s.GetAt(0)>='1'&&
s.GetAt(0)<='9')||
s.Find(" ")>=1||pDoc->diagram->have(s)==1)
{
MessageBox("error input in the formal dialog",NULL,MB_ICONSTOP);
}
else
{
int x;
if(flag==3)
{
x=1;
}
else
{
x=2;
}
MyEntity *e=new MyEntity(s,p1->x,p1->y,p2->x,p2->y,x);
pDoc->diagram->addElement(e);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -