资源简介

1.可以绘制线段,矩形,圆,多边形 2.可以平移这些区域 3.绘制完成后,可以用鼠标选中顶点并随鼠标移动而修改顶点. 4.矩形使用了橡皮框,多边形顶点的修改自定义类 效率不错,不卡,不闪. vc6,vs2008或以上都可以运行. 源代码很详细和规则,相信不让你后悔给分:)

资源截图

代码片段和文件信息

// cntritem.h : interface of the CDrawItem class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include “stdafx.h“
#include “drawcli.h“

#include “drawdoc.h“
#include “drawobj.h“
#include “drawvw.h“
#include “cntritem.h“

#ifdef _DEBUG
#undef THIS_FILE
static char baseD_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDrawItem implementation

IMPLEMENT_SERIAL(CDrawItem COleClientItem 0)

CDrawItem::CDrawItem(CDrawDoc* pContainer CDrawOleObj* pDrawObj)
: COleClientItem(pContainer)
{
m_pDrawObj = pDrawObj;
}

CDrawItem::~CDrawItem()
{
if (m_pDrawObj != NULL)
m_pDrawObj->m_pClientItem = NULL;
}

void CDrawItem::onchange(OLE_NOTIFICATION nCode DWORD dwParam)
{
ASSERT_VALID(this);

COleClientItem::onchange(nCode dwParam);

switch(nCode)
{
case OLE_CHANGED_STATE:
case OLE_CHANGED_ASPECT:
m_pDrawObj->Invalidate();
break;
case OLE_CHANGED:
UpdateExtent(); // extent may have changed
m_pDrawObj->Invalidate();
break;
}
}

BOOL CDrawItem::onchangeItemPosition(const CRect& rectPos)
{
ASSERT_VALID(this);

CDrawView* pView = GetActiveView();
ASSERT_VALID(pView);
CRect rect = rectPos;
pView->ClientToDoc(rect);

if (rect != m_pDrawObj->m_position)
{
// invalidate old rectangle
m_pDrawObj->Invalidate();

// update to new rectangle
m_pDrawObj->m_position = rect;
GetExtent(&m_pDrawObj->m_extent);

// and invalidate new rectangle
m_pDrawObj->Invalidate();

// mark document as dirty
GetDocument()->SetModifiedFlag();
}
return COleClientItem::onchangeItemPosition(rectPos);
}

void CDrawItem::OnGetItemPosition(CRect& rPosition)
{
ASSERT_VALID(this);

// update to extent of item if m_position is not initialized
if (m_pDrawObj->m_position.IsRectEmpty())
UpdateExtent();

// copy m_position which is in document coordinates
CDrawView* pView = GetActiveView();
ASSERT_VALID(pView);
rPosition = m_pDrawObj->m_position;
pView->DocToClient(rPosition);
}

void CDrawItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);

// Call base class first to read in COleClientItem data.
// Note: this sets up the m_pDocument pointer returned from
//  CDrawItem::GetDocument therefore it is a good idea
//  to call the base class Serialize first.
COleClientItem::Serialize(ar);

// now store/retrieve data specific to CDrawItem
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}

BOOL CDrawItem::UpdateExtent()
{
CSize 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1784  1998-03-27 01:49  cntritem.h

     文件       6947  1998-03-27 01:49  drawcli.clw

     文件       4830  1998-03-27 01:49  drawcli.cpp

     文件       8476  1998-03-27 01:49  drawcli.dsp

     文件        537  1998-03-27 01:49  drawcli.dsw

     文件       1316  1998-03-27 01:49  drawcli.h

     文件      14358  1998-03-27 01:49  drawcli.mak

     文件     115712  2013-04-21 23:06  drawcli.ncb

     文件       2793  2013-04-21 23:01  drawcli.plg

     文件      22791  1998-03-27 01:49  drawcli.rc

     文件       7859  1998-03-27 01:49  drawdoc.cpp

     文件       1866  1998-03-27 01:49  drawdoc.h

     文件      22286  1998-03-27 01:49  drawobj.cpp

     文件       4678  1998-03-27 01:49  drawobj.h

     文件      11102  1998-03-27 01:49  drawtool.cpp

     文件       2939  1998-03-27 01:49  drawtool.h

     文件      32420  1998-03-27 01:49  drawvw.cpp

     文件       5910  1998-03-27 01:49  drawvw.h

     文件       2741  1998-03-27 01:49  mainfrm.cpp

     文件       1290  1998-03-27 01:49  mainfrm.h

     文件        742  1998-03-27 01:49  makefile

     文件      39822  1998-03-27 01:49  propset.cpp

     文件       5524  1998-03-27 01:49  propset.h

     文件       6339  1998-03-27 01:50  readme.txt

     文件       1585  1998-03-27 01:50  rectdlg.cpp

     文件       1170  1998-03-27 01:50  rectdlg.h

     文件       2830  1998-03-27 01:50  resource.h

     文件         21  1998-03-27 01:50  setup.lst

     文件      17960  1998-03-27 01:50  setup.rul

     文件       1405  1998-03-27 01:50  splitfrm.cpp

............此处省略23个文件信息

评论

共有 条评论

相关资源