第12章補(bǔ)充設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)_第1頁
第12章補(bǔ)充設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)_第2頁
第12章補(bǔ)充設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)_第3頁
第12章補(bǔ)充設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)_第4頁
第12章補(bǔ)充設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)5 5 如何繪制任意大小和方向旋轉(zhuǎn)的文字如何繪制任意大小和方向旋轉(zhuǎn)的文字設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)6 6 如何繪制任意大小的圖像如何繪制任意大小的圖像設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)7 7 如何設(shè)計(jì)和處理句柄如何設(shè)計(jì)和處理句柄設(shè)

2、計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)8 8 如何控制鼠標(biāo)指針狀態(tài)如何控制鼠標(biāo)指針狀態(tài)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)設(shè)計(jì)型實(shí)驗(yàn)指導(dǎo)9 9 如何設(shè)計(jì)多機(jī)聯(lián)合繪圖架構(gòu)如何設(shè)計(jì)多機(jī)聯(lián)合繪圖架構(gòu)2背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+簡介簡介uGraphics Device Interface (Graphics Device Interface (圖形設(shè)備接口圖形設(shè)備接口) ),它提供了圖形圖像繪制和處理功能。它提供了圖形圖像繪制和處理功能。u利用利用GDI+GDI+的托管類可以輕松實(shí)現(xiàn)顏色漸變、透明的托管類可以輕松實(shí)現(xiàn)顏色漸變、透明處理、紋理處理、拉伸和縮放等多種高級功能。處理、紋理處理、拉

3、伸和縮放等多種高級功能。uGDI+GDI+提供三類服務(wù)提供三類服務(wù)二維矢量圖形處理二維矢量圖形處理二維圖像處理二維圖像處理文字顯示文字顯示3背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+坐標(biāo)系坐標(biāo)系u默認(rèn)情況下,坐標(biāo)系的原點(diǎn)在繪圖設(shè)備的左上角,默認(rèn)情況下,坐標(biāo)系的原點(diǎn)在繪圖設(shè)備的左上角,x軸正方向水平向右,軸正方向水平向右,y軸正方向水平垂直向下。軸正方向水平垂直向下。4背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+繪制圖形圖像的要素繪制圖形圖像的要素uGraphicsGraphics對象對象在在窗體或控件的窗體或控件的Paint事件事件中利

4、用中利用e.Graphics獲?。猾@?。煌ㄟ^當(dāng)前窗體的通過當(dāng)前窗體的CreateGraphics方法獲?。环椒ǐ@?。粡睦^承自圖像的任何對象創(chuàng)建從繼承自圖像的任何對象創(chuàng)建Graphics對象;對象;pGraphics g = Graphics.FromImage(myBitmap);Graphics g = Graphics.FromImage(myBitmap);uPenPen對象對象Pen對象有多種構(gòu)造函數(shù),例如:對象有多種構(gòu)造函數(shù),例如:pPen myPen = new Pen(Color.Blue,3,5f)Pen myPen = new Pen(Color.Blue,3,5f);uPa

5、intPaint事件事件窗體或控件的窗體或控件的Paint事件事件在各種繪制命令中,坐標(biāo)原點(diǎn)都是相對的在各種繪制命令中,坐標(biāo)原點(diǎn)都是相對的5設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象 補(bǔ)充例題補(bǔ)充例題M01_RectanleObjectExampleM01_RectanleObjectExample鼠標(biāo)繪制單個固定大小矩形鼠標(biāo)繪制單個固定大小矩形鼠標(biāo)繪制單個可變大小矩形鼠標(biāo)繪制單個可變大小矩形鼠標(biāo)繪制多個可變大小的矩形鼠標(biāo)繪制多個可變大小的矩形 將圖形圖像作為對象將圖形圖像作為對象 當(dāng)同時繪制多個圖形圖像時,使用類對象更容易處理。當(dāng)同時繪制多個圖形圖像時,使用類對象更

6、容易處理。6設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象【例例1 1】使用鼠標(biāo)在使用鼠標(biāo)在PanelPanel內(nèi)繪制任意大小的橢圓。內(nèi)繪制任意大小的橢圓。運(yùn)行效果:運(yùn)行效果:7設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何如何處理鼠標(biāo)事件處理鼠標(biāo)事件 1.1.當(dāng)拖動鼠標(biāo)在窗體或控件上實(shí)現(xiàn)圖形繪制和平移時,都當(dāng)拖動鼠標(biāo)在窗體或控件上實(shí)現(xiàn)圖形繪制和平移時,都會用到窗體或控件的鼠標(biāo)事件。常用的鼠標(biāo)事件有會用到窗體或控件的鼠標(biāo)事件。常用的鼠標(biāo)事件有MouseDownMouseDown事件、事件、MouseMoveMouseMove事件和事件和MouseUpMouseUp事件。事件。MouseDo

7、wnMouseDownMouseMoveMouseUpMouseUp用戶在窗體或控件上按下鼠標(biāo)左鍵用戶在窗體或控件上按下鼠標(biāo)左鍵時,會觸發(fā)時,會觸發(fā)MouseDownMouseDown事件,可以事件,可以在此事件中在此事件中捕獲鼠標(biāo)所在位置的捕獲鼠標(biāo)所在位置的點(diǎn)的坐標(biāo)點(diǎn)的坐標(biāo)。可以持續(xù)獲得鼠標(biāo)移動時經(jīng)過的一可以持續(xù)獲得鼠標(biāo)移動時經(jīng)過的一系列點(diǎn)的坐標(biāo),從而控制圖形的大小系列點(diǎn)的坐標(biāo),從而控制圖形的大小 用戶釋放鼠標(biāo)左鍵時,用戶釋放鼠標(biāo)左鍵時,會觸發(fā)會觸發(fā)MouseUpMouseUp事件事件 8設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件2.2.為了區(qū)分繪制和平移等鼠標(biāo)操作,定義一個類

8、封裝對應(yīng)的為了區(qū)分繪制和平移等鼠標(biāo)操作,定義一個類封裝對應(yīng)的MouseDownMouseDown、MouseMoveMouseMove和和MouseUpMouseUp事件,并將其聲明為事件,并將其聲明為virtualvirtual。當(dāng)用鼠標(biāo)繪制和平移對象時分別從該類派生,重。當(dāng)用鼠標(biāo)繪制和平移對象時分別從該類派生,重寫對應(yīng)的鼠標(biāo)事件。寫對應(yīng)的鼠標(biāo)事件。例如:例如:public class public class ToolObjectToolObject public public virtualvirtual void OnMouseDown( void OnMouseDown(MouseE

9、ventArgsMouseEventArgs e) e) public public virtualvirtual void OnMouseMove( void OnMouseMove(MouseEventArgsMouseEventArgs e) e) public public virtualvirtual void OnMouseUp( void OnMouseUp(MouseEventArgsMouseEventArgs e) e) 9設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件假設(shè)假設(shè)ToolPointerToolPointer實(shí)現(xiàn)的是鼠標(biāo)的選中和平移效果。實(shí)現(xiàn)的是鼠標(biāo)的

10、選中和平移效果。public class public class ToolPointer:ToolObjectToolPointer:ToolObject public public overrideoverride void OnMouseDown(MouseEventArgs e) void OnMouseDown(MouseEventArgs e) /實(shí)現(xiàn)代碼實(shí)現(xiàn)代碼 public public overrideoverride void OnMouseMove(MouseEventArgs e) void OnMouseMove(MouseEventArgs e) /實(shí)現(xiàn)代碼實(shí)現(xiàn)代碼

11、 public public overrideoverride void OnMouseUp(MouseEventArgs e) void OnMouseUp(MouseEventArgs e) /實(shí)現(xiàn)代碼實(shí)現(xiàn)代碼 10設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件 ToolObjectToolObject類對鼠標(biāo)事件進(jìn)行封裝。類對鼠標(biāo)事件進(jìn)行封裝。ToolRectangleToolRectangle類從類從ToolObjectToolObject類繼承,它表示使用鼠標(biāo)實(shí)現(xiàn)矩形的繪制。類繼承,它表示使用鼠標(biāo)實(shí)現(xiàn)矩形的繪制。ToolPointerToolPointer類從類從ToolO

12、bjectToolObject類繼承,它表示使用鼠標(biāo)實(shí)現(xiàn)類繼承,它表示使用鼠標(biāo)實(shí)現(xiàn)繪制對象的選中和平移等功能。繪制對象的選中和平移等功能。11設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件 為了統(tǒng)一管理繪制對象的平移和繪制操作,定義為了統(tǒng)一管理繪制對象的平移和繪制操作,定義ToolObjectToolObject類型的變量類型的變量activeToolactiveTool表示當(dāng)前活動的對象。表示當(dāng)前活動的對象。 若實(shí)現(xiàn)繪制對象的平移效果,若實(shí)現(xiàn)繪制對象的平移效果, 則則activeTool=new ToolPointer();activeTool=new ToolPointer();

13、。 若實(shí)現(xiàn)矩形繪制,若實(shí)現(xiàn)矩形繪制,則則activeTool=new ToolRectangle();activeTool=new ToolRectangle();。 調(diào)用時根據(jù)調(diào)用時根據(jù)C#C#執(zhí)行時調(diào)用聲明為執(zhí)行時調(diào)用聲明為virtualvirtual方法方法的原則。如果的原則。如果當(dāng)前創(chuàng)建的是當(dāng)前創(chuàng)建的是ToolRectangleToolRectangle類的實(shí)例,則就會調(diào)用類的實(shí)例,則就會調(diào)用ToolRectangleToolRectangle中相應(yīng)的鼠標(biāo)事件。中相應(yīng)的鼠標(biāo)事件。12設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)2 2 如何處理鼠標(biāo)事件如何處理鼠標(biāo)事件 private void panel1_Mou

14、seDown(object sender, private void panel1_MouseDown(object sender, MouseEventArgs e)MouseEventArgs e) panel1.Capture = false; panel1.Capture = false; if (e.Button = MouseButtons.Left) if (e.Button = MouseButtons.Left) activeTool.OnMouseDown(e); activeTool.OnMouseDown(e); 若若activeToolactiveTool初始化為初始

15、化為ToolRectangleToolRectangle類的實(shí)例,則會調(diào)用類的實(shí)例,則會調(diào)用ToolRectangleToolRectangle類中的類中的OnMouseDownOnMouseDown事件。事件。13設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【例例2 2】繪制任意大小的矩形繪制任意大小的矩形。運(yùn)行效果:運(yùn)行效果:14設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形考慮如何繪制任意大小的正方形?考慮如何繪制任意大小的正方形?u構(gòu)造構(gòu)造RectangleRectangle對象時,寬度和高度取值相同。對象時,寬度和高度取值

16、相同??紤]如何繪制任意大小的橢圓?考慮如何繪制任意大小的橢圓?u修改修改DrawDraw方法中的代碼即:方法中的代碼即:g.DrawEllipse(pen,Rect);g.DrawEllipse(pen,Rect);考慮如何繪制任意大小的圓?考慮如何繪制任意大小的圓?u構(gòu)造構(gòu)造RectangleRectangle對象時,寬度和高度取值相同;對象時,寬度和高度取值相同;u修改修改DrawDraw方法中的代碼即:方法中的代碼即:g.DrawEllipse(pen,Rect);g.DrawEllipse(pen,Rect);15設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本

17、圖形【補(bǔ)充例題補(bǔ)充例題M04_DrawPloygenExampleForm1M04_DrawPloygenExampleForm1】 如何繪制任意大小的直角三角形?(如何繪制任意大小的直角三角形?(調(diào)整代碼調(diào)整代碼可以改變直角可以改變直角的位置)的位置)16設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補(bǔ)充例題補(bǔ)充例題M04_DrawPloygenExampleFormTringleM04_DrawPloygenExampleFormTringle】 如何繪制任意大小的三角形?(如何繪制任意大小的三角形?(調(diào)整代碼即可以改變?nèi){(diào)整代碼即可以改變?nèi)切蔚姆较?,?shí)現(xiàn)

18、倒三角、向左三角、向右三角等)角形的方向,實(shí)現(xiàn)倒三角、向左三角、向右三角等)17設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補(bǔ)充例題補(bǔ)充例題M04_DrawPloygenExampleFormLingM04_DrawPloygenExampleFormLing】繪制任意大小的菱形?繪制任意大小的菱形?18設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補(bǔ)充例題補(bǔ)充例題M04_DrawPloygenExampleFormStarM04_DrawPloygenExampleFormStar】繪制任意大小的五角形?繪制任意大小的五角形?

19、19設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補(bǔ)充例題補(bǔ)充例題M04_DrawPloygenExampleFormPloygonM04_DrawPloygenExampleFormPloygon】繪制任意大小的正多邊形?繪制任意大小的正多邊形?20設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線程序舉例:程序舉例:【例例3 3】繪制任意形狀的曲線繪制任意形狀的曲線運(yùn)行效果:運(yùn)行效果:21設(shè)計(jì)設(shè)計(jì)指導(dǎo)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補(bǔ)充例題補(bǔ)充例題M02_CurveObjectExampleM02_CurveObj

20、ectExample】 繪制帶箭頭的曲線該如何繪制?繪制帶箭頭的曲線該如何繪制?u在在DrawDraw方法中添加如下代碼:方法中添加如下代碼:(g g為為GraphicsGraphics對象,對象,penpen為為PenPen對象)對象) g.SmoothingMode = SmoothingMode.AntiAlias;g.SmoothingMode = SmoothingMode.AntiAlias; AdjustableArrowCap myArrow = new AdjustableArrowCap myArrow = new AdjustableArrowCap(4, 4, true

21、);AdjustableArrowCap(4, 4, true); pen.CustomEndCap = myArrow; pen.CustomEndCap = myArrow;22設(shè)計(jì)設(shè)計(jì)指導(dǎo)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補(bǔ)充例題補(bǔ)充例題M02_CurveObjectExampleFromCurveArrowM02_CurveObjectExampleFromCurveArrow】 繪制任意形狀的帶箭頭的曲線繪制任意形狀的帶箭頭的曲線23設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線 繪制封閉曲線該如何繪制?繪制封閉曲線該如何繪制?( (修改

22、修改DrawDraw方法中的代碼)方法中的代碼)using (Pen pen = new Pen(PenColor,PenWidth)using (Pen pen = new Pen(PenColor,PenWidth) Point pts = new PointPointList.Count; Point pts = new PointPointList.Count; PointList.CopyTo(pts); PointList.CopyTo(pts); if (pts.Length 3) if (pts.Length 1) if (pts.Length 1) g.DrawLine(pe

23、n, pts0, pts1); g.DrawLine(pen, pts0, pts1); else else g.DrawClosedCurve(pen, pts, 1.0fg.DrawClosedCurve(pen, pts, 1.0f, , FillMode.AlternateFillMode.Alternate);); 24設(shè)計(jì)設(shè)計(jì)指導(dǎo)指導(dǎo)4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補(bǔ)充例題補(bǔ)充例題M02_CurveObjectExampleFromClosedCurveM02_CurveObjectExampleFromClosedCurve】繪制任意形狀的封閉的曲線繪制任意

24、形狀的封閉的曲線25設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)5 5 繪制任意大小和方向旋轉(zhuǎn)的文字繪制任意大小和方向旋轉(zhuǎn)的文字程序舉例:程序舉例:【例例4 4】繪制任意大小和方向旋轉(zhuǎn)的文字繪制任意大小和方向旋轉(zhuǎn)的文字運(yùn)行效果:運(yùn)行效果:26設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)6 6 繪制任意大小的圖像繪制任意大小的圖像程序舉例:程序舉例:【例例5 5】繪制任意大小的圖像繪制任意大小的圖像運(yùn)行效果:運(yùn)行效果:27繪制圖形圖像的綜合舉例繪制圖形圖像的綜合舉例 補(bǔ)充例題補(bǔ)充例題【M7_DrawShapeExampleM7_DrawShapeExample】28程序主界面風(fēng)格設(shè)計(jì)舉例程序主界面風(fēng)格設(shè)計(jì)舉例【補(bǔ)充例題補(bǔ)充例題UIDesignerEx

25、ampleUIDesignerExample】 風(fēng)格樣式一:風(fēng)格樣式一:29程序主界面風(fēng)格設(shè)計(jì)舉例程序主界面風(fēng)格設(shè)計(jì)舉例 樣式風(fēng)格二:樣式風(fēng)格二:30程序主界面風(fēng)格設(shè)計(jì)舉例程序主界面風(fēng)格設(shè)計(jì)舉例 樣式風(fēng)格三:樣式風(fēng)格三:31設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)7 7 句柄的設(shè)計(jì)和處理句柄的設(shè)計(jì)和處理 句柄也稱為控制點(diǎn),可以用黑色的小方框表示。句柄也稱為控制點(diǎn),可以用黑色的小方框表示。比如矩形的句柄個數(shù)是比如矩形的句柄個數(shù)是8 8個,這個,這8 8個句柄將矩形的個句柄將矩形的4 4個頂點(diǎn)個頂點(diǎn)和和4 4條邊中間的點(diǎn)作為控制點(diǎn)。條邊中間的點(diǎn)作為控制點(diǎn)。對于曲線而言,可以把構(gòu)成曲線的點(diǎn)作為句柄。對于曲線而言,可以把構(gòu)成

26、曲線的點(diǎn)作為句柄。對于文本來說,可以選擇文字所在矩形的左上角和右上角對于文本來說,可以選擇文字所在矩形的左上角和右上角兩個點(diǎn)作為控制點(diǎn)。兩個點(diǎn)作為控制點(diǎn)。 在在DrawObjectDrawObject類中添加句柄處理的抽象方法。類中添加句柄處理的抽象方法。 以以DrawRectangleDrawRectangle類為例,說明如何實(shí)現(xiàn)類為例,說明如何實(shí)現(xiàn)DrawObjectDrawObject類的抽類的抽象方法。象方法。32設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)8 8 鼠標(biāo)指針狀態(tài)控制鼠標(biāo)指針狀態(tài)控制 鼠標(biāo)指針狀態(tài)有鼠標(biāo)指針狀態(tài)有3 3種:種:u繪制狀態(tài)、非繪制狀態(tài)和選擇狀態(tài)。繪制狀態(tài)、非繪制狀態(tài)和選擇狀態(tài)。 為了判

27、斷鼠標(biāo)的指針狀態(tài)為了判斷鼠標(biāo)的指針狀態(tài)u添加一個添加一個ToolPointerToolPointer類。類。ToolPointerToolPointer類中定義了一個枚舉類中定義了一個枚舉SelectionModeSelectionMode,該枚舉有,該枚舉有NoneNone、NetSelectionNetSelection、MoveMove和和SizeSize四四個值。個值。 MouseDownMouseDown、MouseMoveMouseMove和和MouseUpMouseUp事件中分別進(jìn)行幾種事件中分別進(jìn)行幾種狀態(tài)的轉(zhuǎn)換狀態(tài)的轉(zhuǎn)換uNoneNone是初始狀態(tài)、是初始狀態(tài)、uNetSel

28、ectionNetSelection是選擇圖形圖像狀態(tài),繪制矩形選擇框的虛框是選擇圖形圖像狀態(tài),繪制矩形選擇框的虛框(即繪制一個灰色的矩形,使其包含所選擇的圖形圖像對象)(即繪制一個灰色的矩形,使其包含所選擇的圖形圖像對象)uMoveMove是移動選中的對象是移動選中的對象uSizeSize是調(diào)整圖形圖像的大小。是調(diào)整圖形圖像的大小。33設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)8 8 鼠標(biāo)指針狀態(tài)控制鼠標(biāo)指針狀態(tài)控制 【例例6 6】在例在例5 5的基礎(chǔ)上實(shí)現(xiàn)圖形圖像的選中、縮放、平移的基礎(chǔ)上實(shí)現(xiàn)圖形圖像的選中、縮放、平移等效果。等效果。 運(yùn)行效果:運(yùn)行效果:34設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)9 9 多機(jī)聯(lián)合繪圖架構(gòu)設(shè)計(jì)多機(jī)聯(lián)合繪圖

29、架構(gòu)設(shè)計(jì) 關(guān)鍵點(diǎn)關(guān)鍵點(diǎn)u繼承機(jī)制繼承機(jī)制u雙緩沖雙緩沖u如何傳輸:字符串、字節(jié)數(shù)組如何傳輸:字符串、字節(jié)數(shù)組u序列化與反序列化序列化與反序列化u導(dǎo)出對象導(dǎo)出對象1.1. 打印預(yù)覽打印預(yù)覽35設(shè)計(jì)指導(dǎo)設(shè)計(jì)指導(dǎo)9 9 多機(jī)聯(lián)合繪圖架構(gòu)設(shè)計(jì)多機(jī)聯(lián)合繪圖架構(gòu)設(shè)計(jì)9-19-1 綜述綜述主機(jī)和附機(jī)主機(jī)和附機(jī) 任何一臺計(jì)算機(jī)都可以作為主機(jī),但一旦某臺計(jì)算機(jī)作為主機(jī)后,連接到該機(jī)的其任何一臺計(jì)算機(jī)都可以作為主機(jī),但一旦某臺計(jì)算機(jī)作為主機(jī)后,連接到該機(jī)的其他同時制圖的計(jì)算機(jī)只能作為附機(jī)。他同時制圖的計(jì)算機(jī)只能作為附機(jī)。 系統(tǒng)要求必須有一臺計(jì)算機(jī)作為主機(jī),并且只能有一個主機(jī)。只有當(dāng)主機(jī)進(jìn)入制作系統(tǒng)要求必須有一臺計(jì)

30、算機(jī)作為主機(jī),并且只能有一個主機(jī)。只有當(dāng)主機(jī)進(jìn)入制作界面之后,其他附機(jī)才能進(jìn)入制作界面。當(dāng)主機(jī)退出制作界面之后,所有的附機(jī)界面之后,其他附機(jī)才能進(jìn)入制作界面。當(dāng)主機(jī)退出制作界面之后,所有的附機(jī)都將無法繼續(xù)制作。都將無法繼續(xù)制作。系統(tǒng)功能要求系統(tǒng)功能要求(1 1)圖形繪制:完成基本圖形繪制功能,如曲線、矩形、橢圓等。)圖形繪制:完成基本圖形繪制功能,如曲線、矩形、橢圓等。(2 2)圖像繪制:以透明方式顯示任意圖像,并能實(shí)現(xiàn)圖像的縮放。)圖像繪制:以透明方式顯示任意圖像,并能實(shí)現(xiàn)圖像的縮放。(3 3)文字繪制:能在任意位置顯示指定大小的文字,并能旋轉(zhuǎn)。)文字繪制:能在任意位置顯示指定大小的文字,并

31、能旋轉(zhuǎn)。(4 4)導(dǎo)出圖片:能將繪制的對象導(dǎo)出為)導(dǎo)出圖片:能將繪制的對象導(dǎo)出為jpgjpg圖像文件、并提供打印與打印預(yù)覽功能。圖像文件、并提供打印與打印預(yù)覽功能。(5 5)使用鼠標(biāo)選中一個或多個圖形圖像對象時,可以移動或刪除選中的對象。)使用鼠標(biāo)選中一個或多個圖形圖像對象時,可以移動或刪除選中的對象。(6 6)保存繪圖對象后,下次運(yùn)行程序可以打開原來繪制的對象,并能在原來的基礎(chǔ)上)保存繪圖對象后,下次運(yùn)行程序可以打開原來繪制的對象,并能在原來的基礎(chǔ)上繼續(xù)繪制,也可以修改已有的對象。繼續(xù)繪制,也可以修改已有的對象。(7 7)用戶可以在多臺機(jī)器上同時繪制同一張圖的不同部分,而且大家看到的界面是一

32、)用戶可以在多臺機(jī)器上同時繪制同一張圖的不同部分,而且大家看到的界面是一樣的。樣的。36設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-29-2) 類設(shè)計(jì)類設(shè)計(jì)1 1繪圖對象類設(shè)計(jì)繪圖對象類設(shè)計(jì)為了統(tǒng)一管理各種繪圖對象,可以將要繪制的對象抽取成一個抽為了統(tǒng)一管理各種繪圖對象,可以將要繪制的對象抽取成一個抽象基類象基類DrawObjectDrawObject,而其他繪制的對象類則從,而其他繪制的對象類則從DrawObjectDrawObject繼繼承,在擴(kuò)充類中,通過重寫承,在擴(kuò)充類中,通過重寫DrawObjectDrawObject類的屬性和方法,即類的屬性和方法,即可實(shí)現(xiàn)針對特定圖形圖像的繪制??蓪?shí)現(xiàn)針對特定圖形圖

33、像的繪制。37設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-29-2) 類設(shè)計(jì)類設(shè)計(jì)2 2工具類設(shè)計(jì)工具類設(shè)計(jì)當(dāng)用戶使用鼠標(biāo)拖放繪制、選中和移動對象時,都會用到窗體或控件的當(dāng)用戶使用鼠標(biāo)拖放繪制、選中和移動對象時,都會用到窗體或控件的MouseMoveMouseMove、MouseDownMouseDown和和MouseUpMouseUp事件。對于不同的對象,這些鼠標(biāo)事件事件。對于不同的對象,這些鼠標(biāo)事件中的實(shí)現(xiàn)代碼也不盡相同,為此需要提供一個實(shí)現(xiàn)圖形圖像鼠標(biāo)控制的基中的實(shí)現(xiàn)代碼也不盡相同,為此需要提供一個實(shí)現(xiàn)圖形圖像鼠標(biāo)控制的基類類ToolObject ToolObject 。38設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-29-2

34、) 類設(shè)計(jì)類設(shè)計(jì)3 3其他類設(shè)計(jì):其他類設(shè)計(jì):公共類以及進(jìn)行主機(jī)和附機(jī)通信的類的設(shè)計(jì)公共類以及進(jìn)行主機(jī)和附機(jī)通信的類的設(shè)計(jì)(1 1)ObjectIDObjectID類提供為圖形圖像對象創(chuàng)建類提供為圖形圖像對象創(chuàng)建IDID的方法。的方法。(2 2)CCCC類提供系統(tǒng)公用的屬性和方法定義。類提供系統(tǒng)公用的屬性和方法定義。(3 3)GraphicsListGraphicsList類保存繪制對象的列表,同時實(shí)現(xiàn)繪圖對類保存繪制對象的列表,同時實(shí)現(xiàn)繪圖對象的查找、刪除、選擇等功能。繪制對象列表由象的查找、刪除、選擇等功能。繪制對象列表由ListList類型的字段來進(jìn)行維護(hù)。類型的字段來進(jìn)行維護(hù)。(4 4

35、)UserUser類封裝與服務(wù)器通信的客戶端信息。類封裝與服務(wù)器通信的客戶端信息。(5 5)MyClientMyClient類封裝附機(jī)的相關(guān)信息,提供附機(jī)向主機(jī)發(fā)送類封裝附機(jī)的相關(guān)信息,提供附機(jī)向主機(jī)發(fā)送信息以及從主機(jī)接收信息的相關(guān)處理方法。信息以及從主機(jī)接收信息的相關(guān)處理方法。(6 6)MyServerMyServer類封裝主機(jī)的相關(guān)信息,提供主機(jī)向附機(jī)發(fā)送類封裝主機(jī)的相關(guān)信息,提供主機(jī)向附機(jī)發(fā)送信息以及從附機(jī)接收信息的相關(guān)處理方法。信息以及從附機(jī)接收信息的相關(guān)處理方法。39設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-39-3)主機(jī)和附機(jī))主機(jī)和附機(jī) 在主機(jī)和附機(jī)的通信中,主機(jī)收到附機(jī)發(fā)送的字符信息在主機(jī)和附機(jī)

36、的通信中,主機(jī)收到附機(jī)發(fā)送的字符信息后,需要解析字符串的含義,并確定主機(jī)需要執(zhí)行的操后,需要解析字符串的含義,并確定主機(jī)需要執(zhí)行的操作。對于附機(jī)來說,亦是如此。字符串分為命令部分和作。對于附機(jī)來說,亦是如此。字符串分為命令部分和參數(shù)部分,命令部分和參數(shù)部分之間以及參數(shù)部分的各參數(shù)部分,命令部分和參數(shù)部分之間以及參數(shù)部分的各個參數(shù)之間均用逗號分隔。個參數(shù)之間均用逗號分隔。 主機(jī)發(fā)給附機(jī)的命令主機(jī)發(fā)給附機(jī)的命令 附機(jī)發(fā)給主機(jī)的命令附機(jī)發(fā)給主機(jī)的命令40設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-49-4)具體實(shí)現(xiàn))具體實(shí)現(xiàn)畫板設(shè)計(jì)畫板設(shè)計(jì) 為了解決在為了解決在PanelPanel控件上繪圖的閃爍問題,使用用戶控件作為

37、控件上繪圖的閃爍問題,使用用戶控件作為繪圖畫板,然后將用戶控件的雙緩沖屬性繪圖畫板,然后將用戶控件的雙緩沖屬性【DoubleBufferedDoubleBuffered】的的值設(shè)置為值設(shè)置為truetrue即可。即可。【例例7 7】 創(chuàng)建多機(jī)聯(lián)合繪圖應(yīng)用程序,實(shí)現(xiàn)畫板的設(shè)計(jì)。創(chuàng)建多機(jī)聯(lián)合繪圖應(yīng)用程序,實(shí)現(xiàn)畫板的設(shè)計(jì)。2.2.多機(jī)同步控制多機(jī)同步控制 通過發(fā)送相應(yīng)的命令實(shí)現(xiàn)。通過發(fā)送相應(yīng)的命令實(shí)現(xiàn)?!纠? 8】 在例在例12-712-7的基礎(chǔ)上實(shí)現(xiàn)多機(jī)同步控制功能。的基礎(chǔ)上實(shí)現(xiàn)多機(jī)同步控制功能。41設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-49-4)具體實(shí)現(xiàn))具體實(shí)現(xiàn)3.3.序列化與反序列化序列化與反序列化 繪

38、圖對象的序列化與反序列化有兩個用途:繪圖對象的序列化與反序列化有兩個用途:u一是傳輸圖像時要進(jìn)行序列化與反序列化一是傳輸圖像時要進(jìn)行序列化與反序列化u二是保存文件時需要序列化,打開文件時需要反序列化。二是保存文件時需要序列化,打開文件時需要反序列化。 最簡單的辦法就是給類添加最簡單的辦法就是給類添加SerializableSerializable特性特性 通過實(shí)現(xiàn)通過實(shí)現(xiàn)ISerializableISerializable接口的接口的GetObjectDataGetObjectData方法方法u序列化時,會自動調(diào)用序列化時,會自動調(diào)用GetObjectDataGetObjectData方法,并

39、使用方法,并使用SerializationInfoSerializationInfo類存儲序列化與反序列化的全部數(shù)據(jù)。類存儲序列化與反序列化的全部數(shù)據(jù)。u序列化時,使用序列化時,使用AddValueAddValue方法將對象添加到方法將對象添加到SerializationInfoSerializationInfo存儲區(qū)中存儲區(qū)中u反序列化時,使用反序列化時,使用GetValueGetValue方法從方法從SerializationInfoSerializationInfo存存儲區(qū)中提取對象。儲區(qū)中提取對象。42設(shè)計(jì)指導(dǎo)(設(shè)計(jì)指導(dǎo)(9-49-4)具體實(shí)現(xiàn))具體實(shí)現(xiàn)4.4.圖像的打印和預(yù)覽圖像的打印和預(yù)覽打印功能的實(shí)現(xiàn)主要用到打印功能的實(shí)現(xiàn)主要用到PrintPreviewDialogPrintPreviewDialog對話框和對話框和PrintDocumentPrintDocument類。其中類。其中PrintPreviewDialogPrintPreviewDialog實(shí)現(xiàn)打印預(yù)覽實(shí)現(xiàn)打印預(yù)覽功能,功能,PrintDocumentPrintDocument實(shí)現(xiàn)打印功

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論