資源簡介
1.可以繪制線段,矩形,圓,多邊形
2.可以平移這些區(qū)域
3.繪制完成后,可以用鼠標選中頂點并隨鼠標移動而修改頂點.
4.矩形使用了橡皮框,多邊形頂點的修改自定義類
效率不錯,不卡,不閃.
vc6,vs2008或以上都可以運行.
源代碼很詳細和規(guī)則,相信不讓你后悔給分:)

代碼片段和文件信息
//?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小波變換源代碼
評論
共有 條評論