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

📄 eggcilcleview.cpp

📁 这是一个可以检索大量数据的程序
💻 CPP
字号:
// EggCilcleView.cpp : implementation of the CEggCilcleView class
//

#include "stdafx.h"
#include "EggCilcle.h"

#include "EggCilcleDoc.h"
#include "EggCilcleView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView

IMPLEMENT_DYNCREATE(CEggCilcleView, CView)

BEGIN_MESSAGE_MAP(CEggCilcleView, CView)
	//{{AFX_MSG_MAP(CEggCilcleView)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(IDR_TEST_BITMAP, OnTestBitmap)
	ON_COMMAND(IDR_TEST_FIND, OnTestFind)
	ON_COMMAND(IDR_TEST_DELETE, OnTestDelete)
	ON_WM_KEYUP()
	ON_COMMAND(IDR_TEST_VECT, OnTestVect)
	//}}AFX_MSG_MAP
	// Standard printing commands
	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()

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView construction/destruction

CEggCilcleView::CEggCilcleView()
{
	// TODO: add construction code here
	memset(m_PointVect, 0, sizeof(m_PointVect) );
	m_Operation = 0; 
}

CEggCilcleView::~CEggCilcleView()
{
	for ( int i = 0; i < MAX_OBJECT; ++i)
	{
		if (m_PointVect[i] != 0)
			delete m_PointVect[i];
	}
}

BOOL CEggCilcleView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView drawing

void CEggCilcleView::OnDraw(CDC* pDC)
{
	CEggCilcleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CClientDC clientDC(this);
	int i;
	oldbrush=(CBrush*)clientDC.SelectObject(&NoBrush);
	for (  i=0; i<MAX_OBJECT; ++i)
	{
		if( m_PointVect[i] )
			m_PointVect[i]->DrawIt(&clientDC);
	}

	if (m_Operation == 5)
	{
		clientDC.Rectangle(m_LBDown.x, m_LBDown.y,
					   m_LBUp.x, m_LBUp.y);

		oldpen = clientDC.SelectObject(&redpen);
		for (i=0; i<MAX_OBJECT; ++i)
		{
			if( m_SelectObject.test(i) 
				&& m_PointVect[i] )
				m_PointVect[i]->DrawIt(&clientDC);
		}
		clientDC.SelectObject(oldpen);
	}
	clientDC.SelectObject(oldbrush);
}

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView printing

BOOL CEggCilcleView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CEggCilcleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CEggCilcleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView diagnostics

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

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

CEggCilcleDoc* CEggCilcleView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEggCilcleDoc)));
	return (CEggCilcleDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEggCilcleView message handlers

void CEggCilcleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_LBDown = point;
	switch (m_Operation)
	{

	}
	CView::OnLButtonDown(nFlags, point);
}

void CEggCilcleView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC clientDC(this);
	oldbrush=(CBrush*)clientDC.SelectObject(&NoBrush);
	m_LBUp = point;
	VPoint * pp = 0;
	VVect  * pv = 0;
	bmi::OID oid;
	switch(m_Operation)
	{
	case 4: //增加点对象
		oid = m_Index.Add(point.x, point.y);
		if ( oid >= 0 )
		{
			pp= new VPoint;
			pp->Setx(point.x);
			pp->Sety(point.y);
			m_PointVect[oid] = pp;
			m_PointVect[oid]->DrawIt(&clientDC);
			pp = 0;
		}
		break;

	case 5: //查找对象
		{
			CRect v(m_LBDown, m_LBUp);
			m_Index.Find(min(v.left, v.right),
						 max(v.left, v.right),
						 min(v.top, v.bottom), 
						 max(v.top, v.bottom),
						 m_SelectObject);

			this->Invalidate();
		}
		break;

	case 6: // 增加矩形
		pv = new VVect;
		pv->Setx1(m_LBDown.x);
		pv->Sety1(m_LBDown.y);
		pv->Setx2(m_LBUp.x);
		pv->Sety2(m_LBUp.y);

		oid = m_Index.Add(pv->Left(), pv->Right(),
						   pv->Top(),
						   pv->Bottom());

		if ( oid >= 0)
		{
			m_PointVect[oid] = pv;
			m_PointVect[oid]->DrawIt(&clientDC);
		}
		else
			delete pv;
		break;
	}
	clientDC.SelectObject(oldbrush);
	CView::OnLButtonUp(nFlags, point);
}

void CEggCilcleView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC clientDC(this);
	switch(m_Operation)
	{

	}
	CView::OnMouseMove(nFlags, point);
}

BOOL CEggCilcleView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	CWinApp*pApp=AfxGetApp();
	if(pApp)
	{
		VERIFY(m_Cursor1=pApp->LoadCursor(IDC_CURSOR1));
		VERIFY(m_Cursor2=pApp->LoadCursor(IDC_CURSOR2));
	}
	NoBrush.CreateStockObject(NULL_BRUSH);
	whitepen.CreateStockObject(WHITE_PEN);
	redpen.CreatePen(PS_SOLID ,1,RGB(255,0,0));
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

void CEggCilcleView::OnTestBitmap() 
{
	// TODO: Add your command handler code here
	m_Operation = 4;
}

void CEggCilcleView::OnTestFind() 
{
	// TODO: Add your command handler code here
	m_Operation = 5;
}

void CEggCilcleView::OnTestDelete() 
{
	// TODO: Add your command handler code here
	for ( int i = 0; i < MAX_OBJECT; ++i)
	{
		if( m_SelectObject.test(i) )
		{
			m_SelectObject.set(i, false);
			if( m_PointVect[i] )
			{
				m_PointVect[i]->DeleteNotify(i, &m_Index);
				delete m_PointVect[i];
				m_PointVect[i] = 0;				
			}
		}
	}
	CClientDC clientDC(this);
	this->Invalidate();
}

void CEggCilcleView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if( nChar == VK_DELETE)
		OnTestDelete();
	CView::OnKeyUp(nChar, nRepCnt, nFlags);
}

void CEggCilcleView::OnTestVect() 
{
	// TODO: Add your command handler code here
	m_Operation = 6;
}

⌨️ 快捷键说明

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