// SketcherView.cpp : implementation of the CSketcherView class
//
#include "stdafx.h"
#include "Sketcher.h"
#include "SketcherDoc.h"
#include "Elements.h"
#include "SketcherView.h"
#include "ChildFrm.h"
#include "ScaleDialog.h"
#include "TextDialog.h"
#include "PrintData.h"
#include <cmath>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CSketcherView
IMPLEMENT_DYNCREATE(CSketcherView, CScrollView)
BEGIN_MESSAGE_MAP(CSketcherView, CScrollView)
// 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)
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_ELEMENT_MOVE, &CSketcherView::OnElementMove)
ON_COMMAND(ID_ELEMENT_DELETE, &CSketcherView::OnElementDelete)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_ELEMENT_SENDTOBACK, &CSketcherView::OnElementSendtoback)
ON_COMMAND(ID_VIEW_SCALE, &CSketcherView::OnViewScale)
END_MESSAGE_MAP()
// CSketcherView construction/destruction
CSketcherView::CSketcherView()
: m_FirstPoint(0,0)
, m_SecondPoint(0,0)
, m_pTempElement(NULL)
, m_pSelected(NULL)
, m_MoveMode(FALSE)
, m_CursorPos(CPoint(0,0))
, m_FirstPos(CPoint(0,0))
,m_Scale(1)
{
SetScrollSizes(MM_TEXT, CSize(0,0)); // Set arbitrary scrollers
}
CSketcherView::~CSketcherView()
{
}
BOOL CSketcherView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
// CSketcherView drawing
void CSketcherView::OnDraw(CDC* pDC)
{
CSketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc)
return;
POSITION aPos = pDoc->GetListHeadPosition();
CElement* pElement = 0; // Store for an element pointer
while(aPos) // Loop while aPos is not null
{
pElement = pDoc->GetNext(aPos); // Get the current element pointer
// If the element is visible...
if(pDC->RectVisible(pElement->GetBoundRect()))
pElement->Draw(pDC, m_pSelected);// ...draw it
}
}
// CSketcherView printing
BOOL CSketcherView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->m_lpUserData = new CPrintData; // Create a print data object
CSketcherDoc* pDoc = GetDocument(); // Get a document pointer
// Get the whole document area
CRect DocExtent = pDoc->GetDocExtent();
// Save the reference point for the whole document
((CPrintData*)(pInfo->m_lpUserData))->m_DocRefPoint =
CPoint(DocExtent.left, DocExtent.bottom);
// Get the name of the document file and save it
((CPrintData*)(pInfo->m_lpUserData))->m_DocTitle = pDoc->GetTitle();
// Calculate how many printed page widths of 600 units are required
// to accommodate the width of the document
((CPrintData*)(pInfo->m_lpUserData))->m_nWidths =
static_cast<UINT>(ceil((static_cast<double>(DocExtent.Width()))/600.0));
// Calculate how many printed page lengths of 900 units are required
// to accommodate the document length
((CPrintData*)(pInfo->m_lpUserData))->m_nLengths =
static_cast<UINT>(ceil((static_cast<double>(DocExtent.Height()))/900.0));
// Set the first page number as 1 and
// set the last page number as the total number of pages
pInfo->SetMinPage(1);
pInfo->SetMaxPage((static_cast<CPrintData*>(pInfo->m_lpUserData))->m_nWidths *
(static_cast<CPrintData*>(pInfo->m_lpUserData))->m_nLengths);
return DoPreparePrinting(pInfo);
}
void CSketcherView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSketcherView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// Delete our print data object
delete static_cast<CPrintData*>(pInfo->m_lpUserData);
}
// CSketcherView diagnostics
#ifdef _DEBUG
void CSketcherView::AssertValid() const
{
CView::AssertValid();
}
void CSketcherView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSketcherDoc* CSketcherView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSketcherDoc)));
return (CSketcherDoc*)m_pDocument;
}
#endif //_DEBUG
// CSketcherView message handlers
void CSketcherView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(this == GetCapture())
ReleaseCapture(); // Stop capturing mouse messages
// If there is an element, add it to the document
if(m_pTempElement)
{
GetDocument()->AddElement(m_pTempElement);
GetDocument()->UpdateAllViews(0,0,m_pTempElement); // Tell all the views
m_pTempElement = 0; // Reset the element pointer
}
}
void CSketcherView::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC aDC(this); // Create a device context
OnPrepareDC(&aDC); // Get origin adjusted
aDC.DPtoLP(&point); // convert point to Logical
// In moving mode, so drop the element
if(m_MoveMode)
{
m_MoveMode = FALSE; // Kill move mode
m_pSelected = 0; // De-select element
GetDocument()->UpdateAllViews(0); // Redraw all the views
GetDocument()->SetModifiedFlag(); // Set the modified flag
}
else
{
CSketcherDoc* pDoc = GetDocument();// Get a document pointer
if(pDoc->GetElementType() == TEXT)
{
CTextDialog aDlg;
if(aDlg.DoModal() == IDOK)
{
// Exit OK so create a text element
CFont aFont;
aFont.CreatePointFont(100, _T(""));
CFont* pOldFont = aDC.SelectObject(&aFont);
CSketcherDoc* pDoc = GetDocument();
CSize TextExtent = aDC.GetTextExtent(aDlg.m_TextString);
// Get bottom right of text rectangle - MM_LOENGLISH
CPoint BottomRt(point.x+TextExtent.cx, point.y-TextExtent.cy);
CText* pTextElement = new CText(point, BottomRt,
aDlg.m_TextString, pDoc->GetElementColor());
// Add the element to the document
pDoc->AddElement(pTextElement);
// Get all views updated
pDoc->UpdateAllViews(0,0,pTextElement);
aDC.SelectObject(pOldFont);
}
return;
}
m_FirstPoint = point; // Record the cursor position
SetCapture(); // Capture subsequent mouse messages
}
}
void CSketcherView::OnMouseMove(UINT nFlags, CPoint point)
{
// Define a Device Context object for the view
CClientDC aDC(this); // DC is for this view
OnPrepareDC(&aDC); // Get origin adjusted
// If we are in move mode, move the selected element and return
if(m_MoveMode)
{
aDC.DPtoLP(&point); // Convert to logical coordinatess
MoveElement(aDC, point); // Move the element
return;
}
aDC.SetROP2(R2_NOTXORPEN); // Set the drawing mode
if((nFlags&MK_LBUTTON) && (this==GetCapture()))
{
aDC.DPtoLP(&point); // convert point to Logical
m_SecondPoint = point; // Save the current cursor position
if(m_pTempElement)
{
if(CURVE == GetDocument()->GetElementType()) // Is it a curve?
{ // We are drawing a curve
// so add a segment to the existing curve
static_cast<CCurve*>(m_pTempElement)->AddSegment(m_SecondPoint);
m_pTempElement->Draw(&aDC); // Now draw it
return; // We are done
}
aDC.SetROP2(R2_NOTXORPEN); // Set drawing mode
// Redraw the old element so it disappears from the view
m_pTempElement->Draw(&aDC);
delete m_pTempElement; // Delete the old element
m_pTempElement = 0;
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
Ivor Horton’s Beginning Visual C++ 2005 (456个子文件)
SketcherView.cpp 20KB
SketcherView.cpp 20KB
SketcherView.cpp 16KB
SketcherView.cpp 16KB
SketcherView.cpp 16KB
SketcherView.cpp 13KB
SketcherView.cpp 13KB
SketcherView.cpp 13KB
Elements.cpp 11KB
Elements.cpp 11KB
Elements.cpp 9KB
Elements.cpp 9KB
Elements.cpp 9KB
Elements.cpp 8KB
Soln6_5ANSI.cpp 8KB
Elements.cpp 8KB
Elements.cpp 8KB
Soln6_5CLR.cpp 8KB
SketcherDoc.cpp 8KB
SketcherDoc.cpp 8KB
CustomerView.cpp 7KB
Soln6_4ANSI.cpp 7KB
Soln6_3ANSI.cpp 7KB
OrderDetailsView.cpp 7KB
OrderDetailsView.cpp 7KB
OrderDetailsView.cpp 7KB
OrderDetailsView.cpp 7KB
SketcherDoc.cpp 6KB
Soln6_4CLR.cpp 6KB
Soln6_3CLR.cpp 6KB
Elements.cpp 6KB
SketcherDoc.cpp 6KB
SketcherDoc.cpp 6KB
SketcherDoc.cpp 6KB
CustomerView.cpp 6KB
Soln8_7.cpp 6KB
SketcherDoc.cpp 5KB
SketcherDoc.cpp 5KB
SketcherDoc.cpp 5KB
SketcherDoc.cpp 5KB
SketcherView.cpp 5KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
Sketcher.cpp 4KB
MainFrm.cpp 4KB
MainFrm.cpp 4KB
MainFrm.cpp 4KB
MainFrm.cpp 4KB
Sketcher.cpp 4KB
Soln9_4.cpp 4KB
ProductView.cpp 4KB
ProductView.cpp 4KB
ProductView.cpp 4KB
MainFrm.cpp 4KB
MainFrm.cpp 4KB
MainFrm.cpp 4KB
CustomerView.cpp 4KB
CustomerView.cpp 4KB
DBSimpleUpdate.cpp 4KB
DBSimpleUpdate.cpp 4KB
DBSimpleUpdate.cpp 4KB
DBSimpleUpdate.cpp 4KB
OrderSet.cpp 4KB
OrderSet.cpp 4KB
OrderSet.cpp 4KB
Soln9_5.cpp 4KB
SkView.cpp 4KB
DBSample.cpp 4KB
DBSample.cpp 4KB
DBSample.cpp 4KB
CustomerView.cpp 4KB
CustomerView.cpp 4KB
CustomerView.cpp 4KB
OrderView.cpp 4KB
OrderView.cpp 4KB
OrderView.cpp 4KB
ProductView.cpp 4KB
ProductView.cpp 4KB
ProductView.cpp 4KB
DBSimpleUpdateDoc.cpp 4KB
DBSimpleUpdateDoc.cpp 4KB
DBSimpleUpdateDoc.cpp 4KB
DBSimpleUpdateDoc.cpp 4KB
ProductView.cpp 3KB
OrderSet.cpp 3KB
OrderSet.cpp 3KB
OrderSet.cpp 3KB
OrderSet.cpp 3KB
Soln8_5.cpp 3KB
StockView.cpp 3KB
StockView.cpp 3KB
CustomerSet.cpp 3KB
CustomerSet.cpp 3KB
CustomerSet.cpp 3KB
共 456 条
- 1
- 2
- 3
- 4
- 5
JackieWell
- 粉丝: 228
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0