//下面是上面三個類的實現,注意list的用法
// cmyarc class
// construction/destruction
cmyarc::cmyarc(myxyz i_pc, myxyz i_ps, myxyz i_pe)
m_pc=i_pc;
m_ps=i_ps;
m_pe=i_pe;
int cmyarc::draw(long ldevice)
double dr=sqrt((m_ps.x-m_pc.x)*(m_ps.x-m_pc.x)+(m_ps.y-m_pc.y)*(m_ps.y-m_pc.y)+(m_ps.z-m_pc.z)*(m_ps.z-m_pc.z));
::arc((hdc)ldevice,m_pc.x-dr,m_pc.y-dr,m_pc.x+dr,m_pc.y+dr,m_ps.x,m_ps.y,m_pe.x,m_pe.y);
return 0;
// cmypolyln class
// construction/destruction
cmypolyln::~cmypolyln()
mypolyln::iterator iter;
for(iter=m_polyln.begin();iter!=m_polyln.end();iter++)
delete (*iter);
m_polyln.clear();
int cmypolyln::addpoint(myxyz *pxyz)
myxyz *p=new myxyz;
*p=*pxyz;
m_polyln.insert(m_polyln.end(),p);
return 0;
int cmypolyln::draw(long ldevice)
hdc hdc=(hdc)ldevice;
mypolyln::iterator iter=m_polyln.begin();
//該處為了圖形的顯示更明顯,擴大了線的比例,更改了線的位置,正常情況下應該使用注釋中的語句
movetoex(hdc,(*iter)->x*100+100,-(*iter)->y*100+200,null);
//movetoex(hdc,(*iter)->x,(*iter)->y,null);
for(iter=m_polyln.begin();iter!=m_polyln.end();iter++)
//該處為了圖形的顯示更明顯,擴大了線的比例,更改了線的位置,正常情況下應該使用注釋中的語句
lineto(hdc,(*iter)->x*100+100,-(*iter)->y*100+200);
// lineto(hdc,(*iter)->x,(*iter)->y);
return 0;
// cshape class
// construction/destruction
cshape::~cshape()
list::iterator iter;
for(iter=m_list.begin();iter!=m_list.end();iter++)
delete (*iter);
m_list.clear();
int cshape::draw(long ldevice)
list::iterator iter;
for(iter=m_list.begin();iter!=m_list.end();iter++)
(*iter)->draw(ldevice);
return 0;
至此,幾何元素物件類實現完成,可以在主程式中進行測試:
void cshapeview::ondraw(cdc* pdc)
cshapedoc* pdoc = getdocument();
assert_valid(pdoc);
cshape shape;
cmyarc *parc=new cmyarc(cmyxyz(100,100,0),cmyxyz(100,20,0),cmyxyz(180,100,0));
shape.m_list.insert(shape.m_list.end(),parc);
cmypolyln *ppolyln=new cmypolyln;
cmyxyz xyz(1,1,0);
ppolyln->addpoint(&xyz);
xyz.x=2;
xyz.y=2;
ppolyln->addpoint(&xyz);
xyz.x=2;
xyz.y=1;
ppolyln->addpoint(&xyz);
shape.m_list.insert(shape.m_list.end(),ppolyln);
shape.draw((long)pdc->m_hdc);
先不要急著執行,現在執行的話會出現一些斷言的錯誤,這是由於你在主程式中new出來空間,而在dll中釋放而造成的(cshape的析構函式在dll中釋放記憶體),解決該問題的方法詳細說明如下:
專案開發經驗談(二)
1.1 需求變化 專案的需要變化是肯定有的,而且變化一般都很頻繁,我們怎麼應對客戶的這種需求變化呢,以不變應萬變。首先在前期的需求調研要做好,盡可能的替使用者考慮,達到功能質量滿足最大化。需求調研前期的 目標與範圍 和需求調研末期的 功能規格說明書 都要跟客戶簽字確認,這樣既能保證我們所理解的需求就...
專案開發經驗談(二)
1.1 需求變化 專案的需要變化是肯定有的,而且變化一般都很頻繁,我們怎麼應對客戶的這種需求變化呢,以不變應萬變。首先在前期的需求調研要做好,盡可能的替使用者考慮,達到功能質量滿足最大化。需求調研前期的 目標與範圍 和需求調研末期的 功能規格說明書 都要跟客戶簽字確認,這樣既能保證我們所理解的需求就...
專案開發經驗談(二)
1.1 需求變化 專案的需要變化是肯定有的,而且變化一般都很頻繁,我們怎麼應對客戶的這種需求變化呢,以不變應萬變。首先在前期的需求調研要做好,盡可能的替使用者考慮,達到功能質量滿足最大化。需求調研前期的 目標與範圍 和需求調研末期的 功能規格說明書 都要跟客戶簽字確認,這樣既能保證我們所理解的需求就...