资源简介
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个文件信息
- 上一篇:飞行棋c++源码初学者学习用
- 下一篇:DSP小波变换源代码
评论
共有 条评论