![小型繪圖系統(tǒng)課程設計._第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/31/30dfe149-4235-4122-99d0-893f1293bbc3/30dfe149-4235-4122-99d0-893f1293bbc31.gif)
![小型繪圖系統(tǒng)課程設計._第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/31/30dfe149-4235-4122-99d0-893f1293bbc3/30dfe149-4235-4122-99d0-893f1293bbc32.gif)
![小型繪圖系統(tǒng)課程設計._第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/31/30dfe149-4235-4122-99d0-893f1293bbc3/30dfe149-4235-4122-99d0-893f1293bbc33.gif)
![小型繪圖系統(tǒng)課程設計._第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/31/30dfe149-4235-4122-99d0-893f1293bbc3/30dfe149-4235-4122-99d0-893f1293bbc34.gif)
![小型繪圖系統(tǒng)課程設計._第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/31/30dfe149-4235-4122-99d0-893f1293bbc3/30dfe149-4235-4122-99d0-893f1293bbc35.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、東華理工大學信息工程學院計算機圖形學課程設計報告 題目:小型繪圖系統(tǒng)姓名:梁啟龍學號:201320070134班級:1320701指導教師:桂穎完成時間:2016年 5月 16日目錄一. 系統(tǒng)功能設計功能說明:實現(xiàn)基本圖元(直線、圓、多邊形、曲線)的繪制;功能要求:1) 使用靜態(tài)切分視圖,將屏幕切分為左右窗格。左窗格是控制窗格,右窗格為顯示窗格。2) 使用橡皮筋技術動態(tài)演示基本圖元的繪制過程。3) 基本圖元的數據(幾何數據和屬性數據)可以交互進行輸入和修改。4) 可以對二維圖形進行顏色填充操作。5) 使用填充算法結合基本圖形生成算法繪制下面的圖形二詳細設計關于視圖是直接基于mfc單文檔制作,未
2、能實現(xiàn)靜態(tài)分切視圖功能,實現(xiàn)在視圖上部添加控制窗格和控制按鈕,視圖區(qū)用以繪圖顯示。詳細設計如圖所示。動態(tài)演示基本圖元的繪制過程:動態(tài)演示圖元繪制需要添加鼠標響應事件來設置,我的設計思路是這樣的,以直線、矩形、圓為例。首先添加一個鼠標左鍵單擊事件void CJjyyView:OnLButtonDown(UINT nFlags, CPoint point)在視圖類上方定義BOOL型變量m_startRect,設置為確認左鍵單擊可以開始畫圖元,定義HCURSOR m_HCross,初始化光標為十字型光標,然后用CPoint定義三個過程中需要用到的點:m_ptOrigin;m_OldPoint;m_s
3、tartPoint;此時把UINT m_ndrawtype;同時定義用以判斷畫的是什么圖形。定義完后再視圖類中CJjyyView:CJjyyView()初始化函數:m_startPoint=0;m_startRect=FALSE;m_ndrawtype=0;m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);完成后再buttondown中添加關鍵代碼:void CJjyyView:OnLButtonDown(UINT nFlags, CPoint point) CView:OnLButtonDown(nFlags, point);m_s
4、tartRect=TRUE;/鼠標左鍵單擊,設置可以開始繪制圖形 m_startPoint=point; /記錄起始點 m_OldPoint=point;/設置老點也為起始點 :SetCursor(m_HCross);m_ptOrigin = point;這樣左鍵單擊的響應事件就暫時設定終了,隨后需要用到buttonup的響應事件來畫出圖形,使用Ctrl+W也就是mfc classwizard添加鼠標松開的響應,首先添加兩行代碼重置繪制標志m_startRect=FALSE;/重置繪制標志 :ClipCursor(NULL);/解鎖光標,即將光標恢復為默認光標然后添加獲取設備句柄函數CClie
5、ntDC dc(this);然后用dc.SelectStockObject(NULL_BRUSH);設置畫刷為空畫刷。接下來使用一個switch(m_ndrawtype)來判別選擇畫哪一種圖形,首先case1就設置為畫直線:添加畫直線代碼:dc.MoveTo(m_startPoint); dc.LineTo(m_OldPoint); 這兩句是擦去MouseMove消息響應中繪制的最后一次臨時線,然后輸入dc.MoveTo(m_startPoint); dc.LineTo(point); 繪制固定線。Break結束。接下來case2即是加入畫矩形的代碼:dc.Rectangle(CRect(m_
6、startPoint,m_OldPoint);dc.Rectangle(CRect(m_startPoint,point); 畫圓也是依次類推,過程中都是直接調用了vc中現(xiàn)有的函數用以繪制圖形,所以這幾部很簡單就做好了。畫圓的代碼為: dc.Ellipse(CRect(m_startPoint,m_OldPoint); dc.Ellipse(CRect(m_startPoint,point); 用以上方法在有算法和可選函數的情況下基本都能畫出想要的圖元了,然而這樣的繪制方法并不能讓人在畫圖的時候看到臨時線而判斷畫出的是不是想要的圖形,這樣就要用到mousemove消息響應機制。添加了mouse
7、move類后在其中加入代碼:CDC *pDC=GetDC();:SetCursor(m_HCross); CClientDC dc(this);dc.SetROP2(R2_NOT);dc.SetROP2(R2_NOT);此處用兩次取反來實現(xiàn)臨時線的繪制和擦去,然后這里和bottonup中需要設置一個同樣的switch()來判定所畫圖形,但不同的是在循環(huán)前要加入一個if(TRUE=m_startRect),根據是否有單擊判定是否可以畫圖形,用直線做實例:case 1:/LINE :SetCursor(m_HCross); /擦去上一次繪制的臨時線 dc.MoveTo(m_startPoint);
8、 dc.LineTo(m_OldPoint); /繪制這一次的臨時線 dc.MoveTo(m_startPoint); dc.LineTo(point); /將臨時線的終點復制給m_OldPoint, /使其在消息循環(huán)的過程中將該值傳遞到 /擦去上一次畫線的過程中,以便擦去上一次所畫的線 m_OldPoint=point; break; 仿照直線實例即可完成其他基本圖元的臨時線型繪制,令使用者更直觀的了解所畫出來的圖形,然后松開左鍵繪制固定圖元線。直線、矩形、圓實現(xiàn)后開始做困難一些的多邊形和曲線的實現(xiàn):我的思路是通過鼠標點擊的點存儲入數組中,用確定點相連來確定多邊形的相應邊繪制多邊形,曲線也是
9、通過確定點來確定曲線的控制多邊形然后繪制出曲線。在左鍵單擊響應中也添加相應case來存儲點的坐標并繪制出一個點再視區(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->Set
10、Pixel(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);然后我添加一個右鍵單擊響應事件用以逐點連線繪制多邊形和曲線。此處我設定一個BOOL變量m_bDraw來確定右鍵是否單擊,然后用與bottondown相同的
11、case來保證調用時不出誤差,本人特別鐘愛使用switch循環(huán),因為不易出錯,可以重復使用:代碼如下: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;j<i;j+)pDC->LineTo(xj,yj);pDC->LineTo(x0,y0);/ TODO: Add your message handler co
12、de here and/or call defaulti=0;此處i=0是消除數組中儲存的點,避免重復連線和連線錯誤。這是繪制多邊形方法。繪制曲線的方法是用了所學知識中N次比賽爾曲線的畫法繪制,代碼如下:點的存儲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-&g
13、t;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
14、,point.y+1,RGB(0,0,0);bz3=false;break;其中bz3變量是為了防止誤點兩次右鍵時會使曲線第一點連出一條新的直線至原點而添加的。然后繪制曲線switch(m_ndrawtype) 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;t<1.00001;t=t+0.05)xx=0;yy=0; for(i=0;i<=n;i+)bb=b(i,n,t);xx=xx+xi*bb;yy=
15、yy+yi*bb;pDC->LineTo(int(xx),int(yy); / TODO: Add your message handler code here and/or call defaulti=0;bz3=true;此處應在恰當位置先行定義n次曲線需要用到的函數float b(int i,int n,float t)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;k<=n
16、-i;k+) bh=bh*(1-t);return bh;至此,所需圖元都可以實現(xiàn)動態(tài)繪制。我還加入了鉛筆,比較簡單的實現(xiàn)方法:pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); m_ptOrigin = point;用繪制直線的方法就可以實現(xiàn)畫圖中鉛筆的功能。最后來寫二維圖形的顏色填充,我采用的是圖形學中學到的改進型種子填充算法填充封閉圖形,雖然填充大范圍時速度會有點慢,但好歹現(xiàn)學現(xiàn)用,原理是選定顏色后用鼠標左鍵點擊確定第一個點,然后開始填充點所在的封閉圖形;int z1300002;void push1(int x,int y,long &
17、amp;top) top=top+1; z1top0=x; z1top1=y;void pop1(int &xz,int &yz,long &top) xz=z1top0; yz=z1top1; top=top-1;這段代碼為種子填充算法所需函數。然后在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(top>0) pop1(xz,yz,top); if(pDC-&
18、gt;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,y
19、z)!=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); 其中int xz=m_startPoint.x,yz=m_startPoint.y;即是
20、獲取著色初點。m_Color是我定義的用來調用調色盤顏色的,用int定義即可。然后用如下代碼調取調色盤:void CJjyyView:OnYs() CColorDialog colorDialog;int reasult=colorDialog.DoModal();if(reasult=IDOK)m_Color=colorDialog.GetColor();/ TODO: Add your command handler code here以上便是我的總體設計思路和實現(xiàn)的過程,然后我還加了清屏函數用以清屏void CJjyyView:OnQingping() RedrawWindow();m_
21、ndrawtype=0;i=0;/ TODO: Add your command handler code herem_ndrawtype=0;是清屏后從新選擇圖元按鈕以畫圖(重置);i=0;清除數組存儲點。下面放上實驗結果:至此課設要求基本達成,實驗過程中我也遇到了許多問題,第一個碰到的問題是覆蓋的問題,即是當兩根線畫在同一位置時它就會消失,我覺得應該和負負得正差不多一個道理,還有一個覆蓋即是畫矩形和圓時新的矩形會覆蓋掉先前話的圖形,不能重疊,這兩個問題在不停的研究橡皮筋技術和在博客上研究其他大觸的解答上得到了解決。還有就是畫多邊形和曲線時一開始我不知道要怎么設置數組存儲點,把點打出來然后連
22、線繪圖。經過我請教實力過硬的同學后得到了解決,原來其實很簡單就能實現(xiàn)。還有就是在調用調色盤時怎么把顏色輸出到所學的種子填充算法中,經過幾次修改輸出的RGB后得到解決。然后就沒什么值得商榷的問題了,這就得到了一個簡單的繪圖程序,當然還有許多可以改進和完善的地方。3、 總結及展望1) 總結: 這次的課設經由參閱書本資料和博客大觸的指點以及在同學的幫助下得以完成,真正的自己完成了一個小程序的設計,基本實現(xiàn)了題目中要求的各項功能,尚欠靜態(tài)切分視圖,圖元的交互輸入和修改也沒有能實現(xiàn),但是在設計和編碼的過程中學習到了不少新的知識和程序設計方式,收貨頗豐。自己感覺短時間內做出這樣的效果還較為滿意。2) 展望
23、:整個設計中因為設計時出現(xiàn)的各種問題等原因可能有許多代碼基本上沒什么用,在修改時因為沒有報錯就沒有刪去,導致整個程序源碼會有些雜亂,源碼可讀性不強,不足之處還在于打點繪制曲線之后點沒有消掉,還留于視區(qū),可以考慮通過設計橡皮擦功能或者調整源碼使之再繪制曲線后消去,下一步的工作和思路在于添加橡皮擦功能令用戶能進行小范圍的修改,還可以考慮加入撤銷和重做的按鈕與指令,然后就是加入改變繪制線的線寬、線型和顏色等屬性的插件。使程序更加趨近于畫圖,達到更好的設計效果和人機交互目的。實驗源代碼:/ jjyyView.cpp : implementation of the CJjyyView class/#in
24、clude "stdafx.h"#include "jjyy.h"#include "ZX.h"#include "ZF.h"#include "jjyyDoc.h"#include "jjyyView.h"#include "QYTC.h"#include "TXBH.h"#include "YUAN.h"#include "TXCJ.h"#include "QXSC.h"#
25、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; z1top0=x; z1top1=y;void pop1(int &xz,int &yz,long &
26、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_TXBH, OnTxbh)ON_COMMAND(ID_TXCJ, OnTxcj)ON_COMMAND(ID_
27、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(ID_HB, OnHb)ON_COMMAND(ID_YS, OnYs)ON_WM_LBUTTONDO
28、WN()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_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPrevi
29、ew)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;CJjyyView:CJjyyView()m_startPoint=0;m_startRect=FALSE;m_n
30、drawtype=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 CREATESTRUCT csreturn CView:PreCreateWindow(cs
31、);/ 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 DoPreparePrinting(pInfo);void CJjyyView:OnBeginPrinting(C
32、DC* /*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:AssertValid();void CJjyyView:Dump(CDumpCon
33、text& 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();m_ndrawtype=0;i=0;/ TODO: Add yo
34、ur 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 herevoid CJjyyView:OnTianchong() m_nd
35、rawtype=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: Add your command handler code here
36、void CJjyyView:OnLButtonDown(UINT nFlags, CPoint point) CView:OnLButtonDown(nFlags, point);m_startRect=TRUE;/鼠標左鍵單擊,設置可以開始繪制矩形框 m_startPoint=point; /記錄起始點 m_OldPoint=point;/設置老點也為起始點 :SetCursor(m_HCross);m_ptOrigin = point;m_bDraw = true;switch(m_ndrawtype) case 6:CDC*pDC=GetDC();xi=point.x;yi=point
37、.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->SetPixel
38、(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(
39、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->SetPixel(point.x+1,point.y+1,RGB(0,0,0);pDC->SetPixel(point.x+1,point.y+1,RG
40、B(0,0,0);pDC->SetPixel(point.x+1,point.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);/獲取設備句柄 dc.SelectStockObject(NULL_BRUS
41、H); /設置畫刷為空畫刷 switch(m_ndrawtype) case 1:/Line /擦去MouseMove消息響應中繪制的最后一次臨時線 dc.MoveTo(m_startPoint); dc.LineTo(m_OldPoint); /繪制固定線 dc.MoveTo(m_startPoint); dc.LineTo(point); break; case 2: /Retangle /利用當前畫刷繪制矩形,內部由當前空畫刷(NULL_BRUSH)填充。 /擦去MouseMove消息響應中的臨時矩形 dc.Rectangle(CRect(m_startPoint,m_OldPoint)
42、; /繪制固定矩形 dc.Rectangle(CRect(m_startPoint,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
43、);while(top>0) pop1(xz,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(x
44、z,yz+1,m_Color); 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); /
45、 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_ndrawtype) case 1:/LINE :SetCursor(m_HCross); /擦去上一次繪制的臨時線 dc.MoveTo(m_startPoint); dc.LineTo(m_OldPoint); /繪制這一次的臨時線 dc.MoveTo(m_startPoint); dc.LineTo(point); /將臨時線的終點復制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二年級教師下學期期末教學工作總結模版(2篇)
- 2025年人才儲備合同協(xié)議范文(2篇)
- 2025年九年級工作總結(3篇)
- 2025年產品設備監(jiān)制合同范文(2篇)
- 2025年買賣定金協(xié)議樣本(五篇)
- 2025年中班幼兒園教師個人工作心得體會例文(2篇)
- 2025年互聯(lián)網電路租賃合同(三篇)
- 2025年個人租房合租合同常用版(4篇)
- 保齡球館裝修合同范本
- 主題餐廳裝修免租合同
- JJG 921-2021環(huán)境振動分析儀
- GB/T 308.1-2013滾動軸承球第1部分:鋼球
- 中藥炮制學-第五、六章
- 中國風軍令狀誓師大會PPT模板
- 小兒高熱驚厥精品課件
- 2023機械工程師考試試題及答案
- 2022年電拖實驗報告伍宏淳
- 豐田汽車戰(zhàn)略規(guī)劃與戰(zhàn)略管理體系研究(2021)
- 公共政策學(第三版)-課件
- 冷卻塔是利用水和空氣的接觸
- 我的家鄉(xiāng)--安徽亳州.PPT
評論
0/150
提交評論