




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、東華理工大學(xué)信息工程學(xué)院計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告 題目:小型繪圖系統(tǒng)姓名:梁啟龍學(xué)號(hào):201320070134班級(jí):1320701指導(dǎo)教師:桂穎完成時(shí)間:2016年 5月 16日目錄一. 系統(tǒng)功能設(shè)計(jì)功能說明:實(shí)現(xiàn)基本圖元(直線、圓、多邊形、曲線)的繪制;功能要求:1) 使用靜態(tài)切分視圖,將屏幕切分為左右窗格。左窗格是控制窗格,右窗格為顯示窗格。2) 使用橡皮筋技術(shù)動(dòng)態(tài)演示基本圖元的繪制過程。3) 基本圖元的數(shù)據(jù)(幾何數(shù)據(jù)和屬性數(shù)據(jù))可以交互進(jìn)行輸入和修改。4) 可以對(duì)二維圖形進(jìn)行顏色填充操作。5) 使用填充算法結(jié)合基本圖形生成算法繪制下面的圖形二詳細(xì)設(shè)計(jì)關(guān)于視圖是直接基于mfc單文檔制作,未
2、能實(shí)現(xiàn)靜態(tài)分切視圖功能,實(shí)現(xiàn)在視圖上部添加控制窗格和控制按鈕,視圖區(qū)用以繪圖顯示。詳細(xì)設(shè)計(jì)如圖所示。動(dòng)態(tài)演示基本圖元的繪制過程:動(dòng)態(tài)演示圖元繪制需要添加鼠標(biāo)響應(yīng)事件來設(shè)置,我的設(shè)計(jì)思路是這樣的,以直線、矩形、圓為例。首先添加一個(gè)鼠標(biāo)左鍵單擊事件void CJjyyView:OnLButtonDown(UINT nFlags, CPoint point)在視圖類上方定義BOOL型變量m_startRect,設(shè)置為確認(rèn)左鍵單擊可以開始畫圖元,定義HCURSOR m_HCross,初始化光標(biāo)為十字型光標(biāo),然后用CPoint定義三個(gè)過程中需要用到的點(diǎn):m_ptOrigin;m_OldPoint;m_s
3、tartPoint;此時(shí)把UINT m_ndrawtype;同時(shí)定義用以判斷畫的是什么圖形。定義完后再視圖類中CJjyyView:CJjyyView()初始化函數(shù):m_startPoint=0;m_startRect=FALSE;m_ndrawtype=0;m_HCross=AfxGetApp()-LoadStandardCursor(IDC_CROSS);完成后再buttondown中添加關(guān)鍵代碼:void CJjyyView:OnLButtonDown(UINT nFlags, CPoint point) CView:OnLButtonDown(nFlags, point);m_start
4、Rect=TRUE;/鼠標(biāo)左鍵單擊,設(shè)置可以開始繪制圖形 m_startPoint=point; /記錄起始點(diǎn) m_OldPoint=point;/設(shè)置老點(diǎn)也為起始點(diǎn) :SetCursor(m_HCross);m_ptOrigin = point;這樣左鍵單擊的響應(yīng)事件就暫時(shí)設(shè)定終了,隨后需要用到buttonup的響應(yīng)事件來畫出圖形,使用Ctrl+W也就是mfc classwizard添加鼠標(biāo)松開的響應(yīng),首先添加兩行代碼重置繪制標(biāo)志m_startRect=FALSE;/重置繪制標(biāo)志 :ClipCursor(NULL);/解鎖光標(biāo),即將光標(biāo)恢復(fù)為默認(rèn)光標(biāo)然后添加獲取設(shè)備句柄函數(shù)CClientDC
5、 dc(this);然后用dc.SelectStockObject(NULL_BRUSH);設(shè)置畫刷為空畫刷。接下來使用一個(gè)switch(m_ndrawtype)來判別選擇畫哪一種圖形,首先case1就設(shè)置為畫直線:添加畫直線代碼:dc.MoveTo(m_startPoint); dc.LineTo(m_OldPoint); 這兩句是擦去MouseMove消息響應(yīng)中繪制的最后一次臨時(shí)線,然后輸入dc.MoveTo(m_startPoint); dc.LineTo(point); 繪制固定線。Break結(jié)束。接下來case2即是加入畫矩形的代碼:dc.Rectangle(CRect(m_star
6、tPoint,m_OldPoint);dc.Rectangle(CRect(m_startPoint,point); 畫圓也是依次類推,過程中都是直接調(diào)用了vc中現(xiàn)有的函數(shù)用以繪制圖形,所以這幾部很簡單就做好了。畫圓的代碼為: dc.Ellipse(CRect(m_startPoint,m_OldPoint); dc.Ellipse(CRect(m_startPoint,point); 用以上方法在有算法和可選函數(shù)的情況下基本都能畫出想要的圖元了,然而這樣的繪制方法并不能讓人在畫圖的時(shí)候看到臨時(shí)線而判斷畫出的是不是想要的圖形,這樣就要用到mousemove消息響應(yīng)機(jī)制。添加了mousemove
7、類后在其中加入代碼:CDC *pDC=GetDC();:SetCursor(m_HCross); CClientDC dc(this);dc.SetROP2(R2_NOT);dc.SetROP2(R2_NOT);此處用兩次取反來實(shí)現(xiàn)臨時(shí)線的繪制和擦去,然后這里和bottonup中需要設(shè)置一個(gè)同樣的switch()來判定所畫圖形,但不同的是在循環(huán)前要加入一個(gè)if(TRUE=m_startRect),根據(jù)是否有單擊判定是否可以畫圖形,用直線做實(shí)例:case 1:/LINE :SetCursor(m_HCross); /擦去上一次繪制的臨時(shí)線 dc.MoveTo(m_startPoint); dc.
8、LineTo(m_OldPoint); /繪制這一次的臨時(shí)線 dc.MoveTo(m_startPoint); dc.LineTo(point); /將臨時(shí)線的終點(diǎn)復(fù)制給m_OldPoint, /使其在消息循環(huán)的過程中將該值傳遞到 /擦去上一次畫線的過程中,以便擦去上一次所畫的線 m_OldPoint=point; break; 仿照直線實(shí)例即可完成其他基本圖元的臨時(shí)線型繪制,令使用者更直觀的了解所畫出來的圖形,然后松開左鍵繪制固定圖元線。直線、矩形、圓實(shí)現(xiàn)后開始做困難一些的多邊形和曲線的實(shí)現(xiàn):我的思路是通過鼠標(biāo)點(diǎn)擊的點(diǎn)存儲(chǔ)入數(shù)組中,用確定點(diǎn)相連來確定多邊形的相應(yīng)邊繪制多邊形,曲線也是通過確定
9、點(diǎn)來確定曲線的控制多邊形然后繪制出曲線。在左鍵單擊響應(yīng)中也添加相應(yīng)case來存儲(chǔ)點(diǎn)的坐標(biāo)并繪制出一個(gè)點(diǎn)再視區(qū)中:CDC*pDC=GetDC();xi=point.x;yi=point.y;i+;pDC-SetPixel(point.x-1,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x,point.y,RG
10、B(0,0,0);pDC-SetPixel(point.x,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);然后我添加一個(gè)右鍵單擊響應(yīng)事件用以逐點(diǎn)連線繪制多邊形和曲線。此處我設(shè)定一個(gè)BOOL變量m_bDraw來確定右鍵是否單擊,然后用與bottondown相同的case來保證調(diào)用時(shí)不出誤差,本人特別鐘愛使用switch循環(huán),因?yàn)椴灰壮鲥e(cuò),可
11、以重復(fù)使用:代碼如下:void CJjyyView:OnRButtonDown(UINT nFlags, CPoint point) m_bDraw=TRUE; switch(m_ndrawtype) case 6: if(m_bDraw)CDC *pDC=GetDC();pDC-MoveTo(x0,y0);for(int j=1;jLineTo(xj,yj);pDC-LineTo(x0,y0);/ TODO: Add your message handler code here and/or call defaulti=0;此處i=0是消除數(shù)組中儲(chǔ)存的點(diǎn),避免重復(fù)連線和連線錯(cuò)誤。這是繪制多邊
12、形方法。繪制曲線的方法是用了所學(xué)知識(shí)中N次比賽爾曲線的畫法繪制,代碼如下:點(diǎn)的存儲(chǔ)CDC*pDC=GetDC();xi=point.x;yi=point.y;i+;if(pDC-GetPixel(point.x,point.y)=RGB(255,255,255)pDC-SetPixel(point.x-1,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x,point.y-1,RGB(0,0,
13、0);pDC-SetPixel(point.x,point.y,RGB(0,0,0);pDC-SetPixel(point.x,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);bz3=false;break;其中bz3變量是為了防止誤點(diǎn)兩次右鍵時(shí)會(huì)使曲線第一點(diǎn)連出一條新的直線至原點(diǎn)而添加的。然后繪制曲線switch(m_ndrawtype)
14、 case 7: if(m_bDraw)if(bz3=false)CDC *pDC=GetDC();float t,xx,yy;float bb;int n=i-1;pDC-MoveTo(x0,y0);for(t=0.05;t1.00001;t=t+0.05)xx=0;yy=0; for(i=0;iLineTo(int(xx),int(yy); / TODO: Add your message handler code here and/or call defaulti=0;bz3=true;此處應(yīng)在恰當(dāng)位置先行定義n次曲線需要用到的函數(shù)float b(int i,int n,float t)
15、int k,a=1,b=1;for(k=i+1;k=n;k+) a=a*k;for(k=1;k=n-i;k+) b=b*k;float bh=(float)a/b;for(k=1;k=i;k+) bh=bh*t;for(k=1;kMoveTo(m_ptOrigin); pDC-LineTo(point); m_ptOrigin = point;用繪制直線的方法就可以實(shí)現(xiàn)畫圖中鉛筆的功能。最后來寫二維圖形的顏色填充,我采用的是圖形學(xué)中學(xué)到的改進(jìn)型種子填充算法填充封閉圖形,雖然填充大范圍時(shí)速度會(huì)有點(diǎn)慢,但好歹現(xiàn)學(xué)現(xiàn)用,原理是選定顏色后用鼠標(biāo)左鍵點(diǎn)擊確定第一個(gè)點(diǎn),然后開始填充點(diǎn)所在的封閉圖形;int
16、 z1300002;void push1(int x,int y,long &top) top=top+1; z1top0=x; z1top1=y;void pop1(int &xz,int &yz,long &top) xz=z1top0; yz=z1top1; top=top-1;這段代碼為種子填充算法所需函數(shù)。然后在bottonup中加入填充代碼:case 4:CDC *pDC=GetDC();CRect rect; int xz=m_startPoint.x,yz=m_startPoint.y;long top=0;push1(xz,yz,top);while(top0) pop1(x
17、z,yz,top); if(pDC-GetPixel(xz-1,yz)!=RGB(0,0,0)&pDC-GetPixel(xz-1,yz)!=m_Color) push1(xz-1,yz,top); pDC-SetPixel(xz-1,yz,m_Color); if(pDC-GetPixel(xz,yz+1)!=RGB(0,0,0)&pDC-GetPixel(xz,yz+1)!=m_Color) push1(xz,yz+1,top); pDC-SetPixel(xz,yz+1,m_Color); if(pDC-GetPixel(xz+1,yz)!=RGB(0,0,0)&pDC-GetPixel
18、(xz+1,yz)!=m_Color) push1(xz+1,yz,top); pDC-SetPixel(xz+1,yz,m_Color); if(pDC-GetPixel(xz,yz-1)!=RGB(0,0,0)&pDC-GetPixel(xz,yz-1)!=m_Color) push1(xz,yz-1,top); pDC-SetPixel(xz,yz-1,m_Color); 其中int xz=m_startPoint.x,yz=m_startPoint.y;即是獲取著色初點(diǎn)。m_Color是我定義的用來調(diào)用調(diào)色盤顏色的,用int定義即可。然后用如下代碼調(diào)取調(diào)色盤:void CJjyyVie
19、w:OnYs() CColorDialog colorDialog;int reasult=colorDialog.DoModal();if(reasult=IDOK)m_Color=colorDialog.GetColor();/ TODO: Add your command handler code here以上便是我的總體設(shè)計(jì)思路和實(shí)現(xiàn)的過程,然后我還加了清屏函數(shù)用以清屏void CJjyyView:OnQingping() RedrawWindow();m_ndrawtype=0;i=0;/ TODO: Add your command handler code herem_ndraw
20、type=0;是清屏后從新選擇圖元按鈕以畫圖(重置);i=0;清除數(shù)組存儲(chǔ)點(diǎn)。下面放上實(shí)驗(yàn)結(jié)果:至此課設(shè)要求基本達(dá)成,實(shí)驗(yàn)過程中我也遇到了許多問題,第一個(gè)碰到的問題是覆蓋的問題,即是當(dāng)兩根線畫在同一位置時(shí)它就會(huì)消失,我覺得應(yīng)該和負(fù)負(fù)得正差不多一個(gè)道理,還有一個(gè)覆蓋即是畫矩形和圓時(shí)新的矩形會(huì)覆蓋掉先前話的圖形,不能重疊,這兩個(gè)問題在不停的研究橡皮筋技術(shù)和在博客上研究其他大觸的解答上得到了解決。還有就是畫多邊形和曲線時(shí)一開始我不知道要怎么設(shè)置數(shù)組存儲(chǔ)點(diǎn),把點(diǎn)打出來然后連線繪圖。經(jīng)過我請(qǐng)教實(shí)力過硬的同學(xué)后得到了解決,原來其實(shí)很簡單就能實(shí)現(xiàn)。還有就是在調(diào)用調(diào)色盤時(shí)怎么把顏色輸出到所學(xué)的種子填充算法中,
21、經(jīng)過幾次修改輸出的RGB后得到解決。然后就沒什么值得商榷的問題了,這就得到了一個(gè)簡單的繪圖程序,當(dāng)然還有許多可以改進(jìn)和完善的地方。3、 總結(jié)及展望1) 總結(jié): 這次的課設(shè)經(jīng)由參閱書本資料和博客大觸的指點(diǎn)以及在同學(xué)的幫助下得以完成,真正的自己完成了一個(gè)小程序的設(shè)計(jì),基本實(shí)現(xiàn)了題目中要求的各項(xiàng)功能,尚欠靜態(tài)切分視圖,圖元的交互輸入和修改也沒有能實(shí)現(xiàn),但是在設(shè)計(jì)和編碼的過程中學(xué)習(xí)到了不少新的知識(shí)和程序設(shè)計(jì)方式,收貨頗豐。自己感覺短時(shí)間內(nèi)做出這樣的效果還較為滿意。2) 展望:整個(gè)設(shè)計(jì)中因?yàn)樵O(shè)計(jì)時(shí)出現(xiàn)的各種問題等原因可能有許多代碼基本上沒什么用,在修改時(shí)因?yàn)闆]有報(bào)錯(cuò)就沒有刪去,導(dǎo)致整個(gè)程序源碼會(huì)有些雜亂
22、,源碼可讀性不強(qiáng),不足之處還在于打點(diǎn)繪制曲線之后點(diǎn)沒有消掉,還留于視區(qū),可以考慮通過設(shè)計(jì)橡皮擦功能或者調(diào)整源碼使之再繪制曲線后消去,下一步的工作和思路在于添加橡皮擦功能令用戶能進(jìn)行小范圍的修改,還可以考慮加入撤銷和重做的按鈕與指令,然后就是加入改變繪制線的線寬、線型和顏色等屬性的插件。使程序更加趨近于畫圖,達(dá)到更好的設(shè)計(jì)效果和人機(jī)交互目的。實(shí)驗(yàn)源代碼:/ jjyyView.cpp : implementation of the CJjyyView class/#include stdafx.h#include jjyy.h#include ZX.h#include ZF.h#include j
23、jyyDoc.h#include jjyyView.h#include QYTC.h#include TXBH.h#include YUAN.h#include TXCJ.h#include QXSC.h#include QMSC.h#include XY.h#include ZSG.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CJjyyViewint z1300002;void push1(int x,int y,long &top) top=top+1;
24、z1top0=x; z1top1=y;void pop1(int &xz,int &yz,long &top) xz=z1top0; yz=z1top1; top=top-1;IMPLEMENT_DYNCREATE(CJjyyView, CView)BEGIN_MESSAGE_MAP(CJjyyView, CView)/AFX_MSG_MAP(CJjyyView)ON_COMMAND(ID_ZX, OnZx)ON_COMMAND(ID_YUAN, OnYuan)ON_COMMAND(ID_ZF, OnZf)ON_COMMAND(ID_QYTC, OnQytc)ON_COMMAND(ID_TXB
25、H, OnTxbh)ON_COMMAND(ID_TXCJ, OnTxcj)ON_COMMAND(ID_QXSC, OnQxsc)ON_COMMAND(ID_QMSC, OnQmsc)ON_COMMAND(ID_XY, OnXy)ON_COMMAND(ID_ZSG, OnZsg)ON_COMMAND(ID_QINGPING, OnQingping)ON_COMMAND(ID_HZX, OnHzx)ON_COMMAND(ID_HJX, OnHjx)ON_COMMAND(ID_HYUAN, OnHyuan)ON_COMMAND(ID_TIANCHONG, OnTianchong)ON_COMMAND
26、(ID_HB, OnHb)ON_COMMAND(ID_YS, OnYs)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_COMMAND(ID_HDBX, OnHdbx)ON_WM_RBUTTONDOWN()ON_COMMAND(ID_HQX, OnHqx)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_CO
27、MMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()int x50,y50,i,k,k1;/ CJjyyView construction/destructionUINT m_ndrawtype;CPoint m_ptOrigin;BOOL m_bDraw;BOOL m_startRect;HCURSOR m_HCross;CPoint m_OldPoint;CPoint m_PointOrigin;CPoint m_startPoint;int m_Color;bool bz3=false;CJjyyV
28、iew:CJjyyView()m_startPoint=0;m_startRect=FALSE;m_ndrawtype=0;m_bDraw = false;m_HCross=AfxGetApp()-LoadStandardCursor(IDC_CROSS);/ TODO: add construction code hereCJjyyView:CJjyyView()BOOL CJjyyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CRE
29、ATESTRUCT csreturn CView:PreCreateWindow(cs);/ CJjyyView drawingvoid CJjyyView:OnDraw(CDC* pDC)CJjyyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CJjyyView printingBOOL CJjyyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrint
30、ing(pInfo);void CJjyyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CJjyyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CJjyyView diagnostics#ifdef _DEBUGvoid CJjyyView:AssertValid() constCView
31、:AssertValid();void CJjyyView:Dump(CDumpContext& dc) constCView:Dump(dc);CJjyyDoc* CJjyyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CJjyyDoc);return (CJjyyDoc*)m_pDocument;#endif /_DEBUG/ CJjyyView message handlersvoid CJjyyView:OnQingping() RedrawWindow
32、();m_ndrawtype=0;i=0;/ TODO: Add your command handler code herevoid CJjyyView:OnHzx() m_ndrawtype=1;/ TODO: Add your command handler code herevoid CJjyyView:OnHjx() m_ndrawtype=2;/ TODO: Add your command handler code herevoid CJjyyView:OnHyuan() m_ndrawtype=3;/ TODO: Add your command handler code he
33、revoid CJjyyView:OnTianchong() m_ndrawtype=4;/ TODO: Add your command handler code herevoid CJjyyView:OnHb() m_ndrawtype=5;/ TODO: Add your command handler code herevoid CJjyyView:OnYs() CColorDialog colorDialog;int reasult=colorDialog.DoModal();if(reasult=IDOK)m_Color=colorDialog.GetColor();/ TODO:
34、 Add your command handler code herevoid CJjyyView:OnLButtonDown(UINT nFlags, CPoint point) CView:OnLButtonDown(nFlags, point);m_startRect=TRUE;/鼠標(biāo)左鍵單擊,設(shè)置可以開始繪制矩形框 m_startPoint=point; /記錄起始點(diǎn) m_OldPoint=point;/設(shè)置老點(diǎn)也為起始點(diǎn) :SetCursor(m_HCross);m_ptOrigin = point;m_bDraw = true;switch(m_ndrawtype) case 6:
35、CDC*pDC=GetDC();xi=point.x;yi=point.y;i+;pDC-SetPixel(point.x-1,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x,point.y,RGB(0,0,0);pDC-SetPixel(point.x,point.y+1,RGB(0,0,0);pDC-S
36、etPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);break;case 7:CDC*pDC=GetDC();xi=point.x;yi=point.y;i+;if(pDC-GetPixel(point.x,point.y)=RGB(255,255,255)pDC-SetPixel(point.x-1,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x-1,poi
37、nt.y,RGB(0,0,0);pDC-SetPixel(point.x-1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x,point.y-1,RGB(0,0,0);pDC-SetPixel(point.x,point.y,RGB(0,0,0);pDC-SetPixel(point.x,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC-SetPixel(point.x+1,point
38、.y+1,RGB(0,0,0);bz3=false;break;/ TODO: Add your message handler code here and/or call defaultvoid CJjyyView:OnLButtonUp(UINT nFlags, CPoint point) m_bDraw = false;m_startRect=FALSE; :ClipCursor(NULL); CClientDC dc(this);/獲取設(shè)備句柄 dc.SelectStockObject(NULL_BRUSH); /設(shè)置畫刷為空畫刷 switch(m_ndrawtype) case 1:
39、/Line /擦去MouseMove消息響應(yīng)中繪制的最后一次臨時(shí)線 dc.MoveTo(m_startPoint); dc.LineTo(m_OldPoint); /繪制固定線 dc.MoveTo(m_startPoint); dc.LineTo(point); break; case 2: /Retangle /利用當(dāng)前畫刷繪制矩形,內(nèi)部由當(dāng)前空畫刷(NULL_BRUSH)填充。 /擦去MouseMove消息響應(yīng)中的臨時(shí)矩形 dc.Rectangle(CRect(m_startPoint,m_OldPoint); /繪制固定矩形 dc.Rectangle(CRect(m_startPoint
40、,point); /m_drawType=0; /該行的可以使得每畫一次都要選擇所畫的形狀 break; case 3: /Circle dc.Ellipse(CRect(m_startPoint,m_OldPoint); dc.Ellipse(CRect(m_startPoint,point); break; case 4:CDC *pDC=GetDC();CRect rect; int xz=m_startPoint.x,yz=m_startPoint.y;long top=0;push1(xz,yz,top);while(top0) pop1(xz,yz,top); if(pDC-Get
41、Pixel(xz-1,yz)!=RGB(0,0,0)&pDC-GetPixel(xz-1,yz)!=m_Color) push1(xz-1,yz,top); pDC-SetPixel(xz-1,yz,m_Color); if(pDC-GetPixel(xz,yz+1)!=RGB(0,0,0)&pDC-GetPixel(xz,yz+1)!=m_Color) push1(xz,yz+1,top); pDC-SetPixel(xz,yz+1,m_Color); if(pDC-GetPixel(xz+1,yz)!=RGB(0,0,0)&pDC-GetPixel(xz+1,yz)!=m_Color) p
42、ush1(xz+1,yz,top); pDC-SetPixel(xz+1,yz,m_Color); if(pDC-GetPixel(xz,yz-1)!=RGB(0,0,0)&pDC-GetPixel(xz,yz-1)!=m_Color) push1(xz,yz-1,top); pDC-SetPixel(xz,yz-1,m_Color); / TODO: Add your message handler code here and/or call defaultCView:OnLButtonUp(nFlags, point);void CJjyyView:OnMouseMove(UINT nFlags, CPoint point) CDC *pDC=GetDC();:SetCursor(m_HCross); CClientDC dc(this);dc.SetROP2(R2_NOT);dc.SetROP2(R2_NOT); dc.SelectStockObject(NULL_BRUSH); if(TRUE=m_startRect) switch(m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 反恐教育主題班會(huì)教案
- 教學(xué)實(shí)施與反饋改進(jìn)計(jì)劃
- 公司生產(chǎn)工作計(jì)劃升級(jí)生產(chǎn)設(shè)備
- 藝術(shù)教育與科學(xué)教育的結(jié)合計(jì)劃
- 幼兒園游戲化學(xué)習(xí)活動(dòng)安排計(jì)劃
- 幼兒園師徒結(jié)對(duì)幫扶方案計(jì)劃
- 秋季海量閱讀與寫作提升方案計(jì)劃
- 運(yùn)營成本優(yōu)化策略計(jì)劃
- 注冊(cè)會(huì)計(jì)師各科目考點(diǎn)解知試題及答案
- 2024年投資市場環(huán)境分析試題及答案
- 中央戲劇學(xué)院招聘筆試真題2023
- 2021年高級(jí)經(jīng)濟(jì)師《高級(jí)經(jīng)濟(jì)實(shí)務(wù)》建筑與房地產(chǎn)經(jīng)濟(jì)專業(yè)考試題庫及答案解析
- 人教版高中物理選擇性必修第三冊(cè)第五章原子核第2節(jié)放射性元素的衰變課件
- 40萬只全現(xiàn)代化蛋雞養(yǎng)殖場項(xiàng)目可行性研究報(bào)告寫作模板-申批備案
- 20起典型火災(zāi)事故案例合集-2024年消防月專題培訓(xùn)
- 拼多多在線測評(píng)98道題
- 中國國新基金管理有限公司招聘筆試題庫2024
- 環(huán)境監(jiān)測站運(yùn)行管理與質(zhì)量控制標(biāo)準(zhǔn)
- 高中歷史選擇性必修2知識(shí)點(diǎn)總結(jié)歸納
- 湖南省2024年對(duì)口升學(xué)考試計(jì)算機(jī)應(yīng)用類試題(含參考答案)
- 2018海灣GST-GD-N90消防應(yīng)急廣播設(shè)備安裝使用說明書
評(píng)論
0/150
提交評(píng)論