最近在學(xué)習(xí)Hoops?? 的引擎(http://www.hoops3d.com )
模擬它的MVO架構(gòu),不過沒有原代碼,所以很難a
設(shè)計了一個交互繪圖基本類,
但是還有錯誤,鼠標(biāo)左鍵點擊兩下
?winGDI.cpp中出錯。
請大蝦指教一二。
我已經(jīng)在這個問題上花了很多的心思。
其中最重要的就是Painter抽象類的設(shè)計
他的子類QBufferDC繼承CDC
而SGView包含Painter指針,方便在SGView ::drawEntity調(diào)用。
SGObject - 對象的抽象類,也就是幾何對象
SGModel- 負(fù)責(zé)對象管理,沒有實現(xiàn)所有的功能,準(zhǔn)備用SceneTree來實現(xiàn)
SGView - 負(fù)責(zé)顯示SGModel中的數(shù)據(jù),關(guān)鍵的函數(shù)
void SGView::drawEntity(SGObject* pObj)
{
???pObj->draw(m_pPainter,this)
}
Painter - 封裝CDC的功能,見代碼
在CSGView創(chuàng)建的時候創(chuàng)建Painter對象
很可能這里有問題!!!!!
void CSGView::OnCreate(..)
{
?????CDC*?pDC =?GetDC();
???Painter* painter = new QBufferDC(pDC);
???m_pSGView->setPainter(painter);
}
MFC 相關(guān)的Document/View架構(gòu)
CSGDocument - 管理SGModel
CSGView - 和SGView建立聯(lián)系,并負(fù)責(zé)把windows的消息發(fā)送給SGView
見原代碼
SGActionManager - 負(fù)責(zé)工具的管理
SGBaseAction - 工具的抽象基類
SGActionDrawLine - 繪制直線的工具
源代碼連接:
http://www.shnenglu.com/Files/richardzeng/MVOTest.rar