使用VC開發程式經驗談(二 續)

2021-12-29 22:53:31 字數 2490 閱讀 2202

//下面是上面三個類的實現,注意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 需求變化 專案的需要變化是肯定有的,而且變化一般都很頻繁,我們怎麼應對客戶的這種需求變化呢,以不變應萬變。首先在前期的需求調研要做好,盡可能的替使用者考慮,達到功能質量滿足最大化。需求調研前期的 目標與範圍 和需求調研末期的 功能規格說明書 都要跟客戶簽字確認,這樣既能保證我們所理解的需求就...