




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1設(shè)計型實驗指導設(shè)計型實驗指導設(shè)計型實驗指導設(shè)計型實驗指導1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象設(shè)計型實驗指導設(shè)計型實驗指導2 2 如何處理鼠標事件如何處理鼠標事件設(shè)計型實驗指導設(shè)計型實驗指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形設(shè)計型實驗指導設(shè)計型實驗指導4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線設(shè)計型實驗指導設(shè)計型實驗指導5 5 如何繪制任意大小和方向旋轉(zhuǎn)的文字如何繪制任意大小和方向旋轉(zhuǎn)的文字設(shè)計型實驗指導設(shè)計型實驗指導6 6 如何繪制任意大小的圖像如何繪制任意大小的圖像設(shè)計型實驗指導設(shè)計型實驗指導7 7 如何設(shè)計和處理句柄如何設(shè)計和處理句柄設(shè)
2、計型實驗指導設(shè)計型實驗指導8 8 如何控制鼠標指針狀態(tài)如何控制鼠標指針狀態(tài)設(shè)計型實驗指導設(shè)計型實驗指導9 9 如何設(shè)計多機聯(lián)合繪圖架構(gòu)如何設(shè)計多機聯(lián)合繪圖架構(gòu)2背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+簡介簡介uGraphics Device Interface (Graphics Device Interface (圖形設(shè)備接口圖形設(shè)備接口) ),它提供了圖形圖像繪制和處理功能。它提供了圖形圖像繪制和處理功能。u利用利用GDI+GDI+的托管類可以輕松實現(xiàn)顏色漸變、透明的托管類可以輕松實現(xiàn)顏色漸變、透明處理、紋理處理、拉伸和縮放等多種高級功能。處理、紋理處理、拉
3、伸和縮放等多種高級功能。uGDI+GDI+提供三類服務(wù)提供三類服務(wù)二維矢量圖形處理二維矢量圖形處理二維圖像處理二維圖像處理文字顯示文字顯示3背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+坐標系坐標系u默認情況下,坐標系的原點在繪圖設(shè)備的左上角,默認情況下,坐標系的原點在繪圖設(shè)備的左上角,x軸正方向水平向右,軸正方向水平向右,y軸正方向水平垂直向下。軸正方向水平垂直向下。4背景知識背景知識GDI+GDI+繪制圖形圖像繪制圖形圖像GDI+GDI+繪制圖形圖像的要素繪制圖形圖像的要素uGraphicsGraphics對象對象在在窗體或控件的窗體或控件的Paint事件事件中利
4、用中利用e.Graphics獲??;獲??;通過當前窗體的通過當前窗體的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事件事件在各種繪制命令中,坐標原點都是相對的在各種繪制命令中,坐標原點都是相對的5設(shè)計指導設(shè)計指導1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象 補充例題補充例題M01_RectanleObjectExampleM01_RectanleObjectExample鼠標繪制單個固定大小矩形鼠標繪制單個固定大小矩形鼠標繪制單個可變大小矩形鼠標繪制單個可變大小矩形鼠標繪制多個可變大小的矩形鼠標繪制多個可變大小的矩形 將圖形圖像作為對象將圖形圖像作為對象 當同時繪制多個圖形圖像時,使用類對象更容易處理。當同時繪制多個圖形圖像時,使用類對象更
6、容易處理。6設(shè)計指導設(shè)計指導1 1 如何將圖形圖像作為對象如何將圖形圖像作為對象【例例1 1】使用鼠標在使用鼠標在PanelPanel內(nèi)繪制任意大小的橢圓。內(nèi)繪制任意大小的橢圓。運行效果:運行效果:7設(shè)計指導設(shè)計指導2 2 如何如何處理鼠標事件處理鼠標事件 1.1.當拖動鼠標在窗體或控件上實現(xiàn)圖形繪制和平移時,都當拖動鼠標在窗體或控件上實現(xiàn)圖形繪制和平移時,都會用到窗體或控件的鼠標事件。常用的鼠標事件有會用到窗體或控件的鼠標事件。常用的鼠標事件有MouseDownMouseDown事件、事件、MouseMoveMouseMove事件和事件和MouseUpMouseUp事件。事件。MouseDo
7、wnMouseDownMouseMoveMouseUpMouseUp用戶在窗體或控件上按下鼠標左鍵用戶在窗體或控件上按下鼠標左鍵時,會觸發(fā)時,會觸發(fā)MouseDownMouseDown事件,可以事件,可以在此事件中在此事件中捕獲鼠標所在位置的捕獲鼠標所在位置的點的坐標點的坐標。可以持續(xù)獲得鼠標移動時經(jīng)過的一可以持續(xù)獲得鼠標移動時經(jīng)過的一系列點的坐標,從而控制圖形的大小系列點的坐標,從而控制圖形的大小 用戶釋放鼠標左鍵時,用戶釋放鼠標左鍵時,會觸發(fā)會觸發(fā)MouseUpMouseUp事件事件 8設(shè)計指導設(shè)計指導2 2 如何處理鼠標事件如何處理鼠標事件2.2.為了區(qū)分繪制和平移等鼠標操作,定義一個類
8、封裝對應(yīng)的為了區(qū)分繪制和平移等鼠標操作,定義一個類封裝對應(yīng)的MouseDownMouseDown、MouseMoveMouseMove和和MouseUpMouseUp事件,并將其聲明為事件,并將其聲明為virtualvirtual。當用鼠標繪制和平移對象時分別從該類派生,重。當用鼠標繪制和平移對象時分別從該類派生,重寫對應(yīng)的鼠標事件。寫對應(yīng)的鼠標事件。例如:例如: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è)計指導設(shè)計指導2 2 如何處理鼠標事件如何處理鼠標事件假設(shè)假設(shè)ToolPointerToolPointer實現(xiàn)的是鼠標的選中和平移效果。實現(xiàn)的是鼠標的
10、選中和平移效果。public class public class ToolPointer:ToolObjectToolPointer:ToolObject public public overrideoverride void OnMouseDown(MouseEventArgs e) void OnMouseDown(MouseEventArgs e) /實現(xiàn)代碼實現(xiàn)代碼 public public overrideoverride void OnMouseMove(MouseEventArgs e) void OnMouseMove(MouseEventArgs e) /實現(xiàn)代碼實現(xiàn)代碼
11、 public public overrideoverride void OnMouseUp(MouseEventArgs e) void OnMouseUp(MouseEventArgs e) /實現(xiàn)代碼實現(xiàn)代碼 10設(shè)計指導設(shè)計指導2 2 如何處理鼠標事件如何處理鼠標事件 ToolObjectToolObject類對鼠標事件進行封裝。類對鼠標事件進行封裝。ToolRectangleToolRectangle類從類從ToolObjectToolObject類繼承,它表示使用鼠標實現(xiàn)矩形的繪制。類繼承,它表示使用鼠標實現(xiàn)矩形的繪制。ToolPointerToolPointer類從類從ToolO
12、bjectToolObject類繼承,它表示使用鼠標實現(xiàn)類繼承,它表示使用鼠標實現(xiàn)繪制對象的選中和平移等功能。繪制對象的選中和平移等功能。11設(shè)計指導設(shè)計指導2 2 如何處理鼠標事件如何處理鼠標事件 為了統(tǒng)一管理繪制對象的平移和繪制操作,定義為了統(tǒng)一管理繪制對象的平移和繪制操作,定義ToolObjectToolObject類型的變量類型的變量activeToolactiveTool表示當前活動的對象。表示當前活動的對象。 若實現(xiàn)繪制對象的平移效果,若實現(xiàn)繪制對象的平移效果, 則則activeTool=new ToolPointer();activeTool=new ToolPointer();
13、。 若實現(xiàn)矩形繪制,若實現(xiàn)矩形繪制,則則activeTool=new ToolRectangle();activeTool=new ToolRectangle();。 調(diào)用時根據(jù)調(diào)用時根據(jù)C#C#執(zhí)行時調(diào)用聲明為執(zhí)行時調(diào)用聲明為virtualvirtual方法方法的原則。如果的原則。如果當前創(chuàng)建的是當前創(chuàng)建的是ToolRectangleToolRectangle類的實例,則就會調(diào)用類的實例,則就會調(diào)用ToolRectangleToolRectangle中相應(yīng)的鼠標事件。中相應(yīng)的鼠標事件。12設(shè)計指導設(shè)計指導2 2 如何處理鼠標事件如何處理鼠標事件 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類的實例,則會調(diào)用類的實例,則會調(diào)用ToolRectangleToolRectangle類中的類中的OnMouseDownOnMouseDown事件。事件。13設(shè)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【例例2 2】繪制任意大小的矩形繪制任意大小的矩形。運行效果:運行效果:14設(shè)計指導設(shè)計指導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è)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本
17、圖形【補充例題補充例題M04_DrawPloygenExampleForm1M04_DrawPloygenExampleForm1】 如何繪制任意大小的直角三角形?(如何繪制任意大小的直角三角形?(調(diào)整代碼調(diào)整代碼可以改變直角可以改變直角的位置)的位置)16設(shè)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補充例題補充例題M04_DrawPloygenExampleFormTringleM04_DrawPloygenExampleFormTringle】 如何繪制任意大小的三角形?(如何繪制任意大小的三角形?(調(diào)整代碼即可以改變?nèi){(diào)整代碼即可以改變?nèi)切蔚姆较?,實現(xiàn)
18、倒三角、向左三角、向右三角等)角形的方向,實現(xiàn)倒三角、向左三角、向右三角等)17設(shè)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補充例題補充例題M04_DrawPloygenExampleFormLingM04_DrawPloygenExampleFormLing】繪制任意大小的菱形?繪制任意大小的菱形?18設(shè)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補充例題補充例題M04_DrawPloygenExampleFormStarM04_DrawPloygenExampleFormStar】繪制任意大小的五角形?繪制任意大小的五角形?
19、19設(shè)計指導設(shè)計指導3 3 如何繪制任意大小的基本圖形如何繪制任意大小的基本圖形【補充例題補充例題M04_DrawPloygenExampleFormPloygonM04_DrawPloygenExampleFormPloygon】繪制任意大小的正多邊形?繪制任意大小的正多邊形?20設(shè)計指導設(shè)計指導4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線程序舉例:程序舉例:【例例3 3】繪制任意形狀的曲線繪制任意形狀的曲線運行效果:運行效果:21設(shè)計設(shè)計指導指導4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補充例題補充例題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è)計設(shè)計指導指導4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補充例題補充例題M02_CurveObjectExampleFromCurveArrowM02_CurveObjectExampleFromCurveArrow】 繪制任意形狀的帶箭頭的曲線繪制任意形狀的帶箭頭的曲線23設(shè)計指導設(shè)計指導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è)計設(shè)計指導指導4 4 如何繪制任意形狀的曲線如何繪制任意形狀的曲線【補充例題補充例題M02_CurveObjectExampleFromClosedCurveM02_CurveObjectExampleFromClosedCurve】繪制任意形狀的封閉的曲線繪制任意
24、形狀的封閉的曲線25設(shè)計指導設(shè)計指導5 5 繪制任意大小和方向旋轉(zhuǎn)的文字繪制任意大小和方向旋轉(zhuǎn)的文字程序舉例:程序舉例:【例例4 4】繪制任意大小和方向旋轉(zhuǎn)的文字繪制任意大小和方向旋轉(zhuǎn)的文字運行效果:運行效果:26設(shè)計指導設(shè)計指導6 6 繪制任意大小的圖像繪制任意大小的圖像程序舉例:程序舉例:【例例5 5】繪制任意大小的圖像繪制任意大小的圖像運行效果:運行效果:27繪制圖形圖像的綜合舉例繪制圖形圖像的綜合舉例 補充例題補充例題【M7_DrawShapeExampleM7_DrawShapeExample】28程序主界面風格設(shè)計舉例程序主界面風格設(shè)計舉例【補充例題補充例題UIDesignerEx
25、ampleUIDesignerExample】 風格樣式一:風格樣式一:29程序主界面風格設(shè)計舉例程序主界面風格設(shè)計舉例 樣式風格二:樣式風格二:30程序主界面風格設(shè)計舉例程序主界面風格設(shè)計舉例 樣式風格三:樣式風格三:31設(shè)計指導設(shè)計指導7 7 句柄的設(shè)計和處理句柄的設(shè)計和處理 句柄也稱為控制點,可以用黑色的小方框表示。句柄也稱為控制點,可以用黑色的小方框表示。比如矩形的句柄個數(shù)是比如矩形的句柄個數(shù)是8 8個,這個,這8 8個句柄將矩形的個句柄將矩形的4 4個頂點個頂點和和4 4條邊中間的點作為控制點。條邊中間的點作為控制點。對于曲線而言,可以把構(gòu)成曲線的點作為句柄。對于曲線而言,可以把構(gòu)成
26、曲線的點作為句柄。對于文本來說,可以選擇文字所在矩形的左上角和右上角對于文本來說,可以選擇文字所在矩形的左上角和右上角兩個點作為控制點。兩個點作為控制點。 在在DrawObjectDrawObject類中添加句柄處理的抽象方法。類中添加句柄處理的抽象方法。 以以DrawRectangleDrawRectangle類為例,說明如何實現(xiàn)類為例,說明如何實現(xiàn)DrawObjectDrawObject類的抽類的抽象方法。象方法。32設(shè)計指導設(shè)計指導8 8 鼠標指針狀態(tài)控制鼠標指針狀態(tài)控制 鼠標指針狀態(tài)有鼠標指針狀態(tài)有3 3種:種:u繪制狀態(tài)、非繪制狀態(tài)和選擇狀態(tài)。繪制狀態(tài)、非繪制狀態(tài)和選擇狀態(tài)。 為了判
27、斷鼠標的指針狀態(tài)為了判斷鼠標的指針狀態(tài)u添加一個添加一個ToolPointerToolPointer類。類。ToolPointerToolPointer類中定義了一個枚舉類中定義了一個枚舉SelectionModeSelectionMode,該枚舉有,該枚舉有NoneNone、NetSelectionNetSelection、MoveMove和和SizeSize四四個值。個值。 MouseDownMouseDown、MouseMoveMouseMove和和MouseUpMouseUp事件中分別進行幾種事件中分別進行幾種狀態(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è)計指導設(shè)計指導8 8 鼠標指針狀態(tài)控制鼠標指針狀態(tài)控制 【例例6 6】在例在例5 5的基礎(chǔ)上實現(xiàn)圖形圖像的選中、縮放、平移的基礎(chǔ)上實現(xiàn)圖形圖像的選中、縮放、平移等效果。等效果。 運行效果:運行效果:34設(shè)計指導設(shè)計指導9 9 多機聯(lián)合繪圖架構(gòu)設(shè)計多機聯(lián)合繪圖
29、架構(gòu)設(shè)計 關(guān)鍵點關(guān)鍵點u繼承機制繼承機制u雙緩沖雙緩沖u如何傳輸:字符串、字節(jié)數(shù)組如何傳輸:字符串、字節(jié)數(shù)組u序列化與反序列化序列化與反序列化u導出對象導出對象1.1. 打印預(yù)覽打印預(yù)覽35設(shè)計指導設(shè)計指導9 9 多機聯(lián)合繪圖架構(gòu)設(shè)計多機聯(lián)合繪圖架構(gòu)設(shè)計9-19-1 綜述綜述主機和附機主機和附機 任何一臺計算機都可以作為主機,但一旦某臺計算機作為主機后,連接到該機的其任何一臺計算機都可以作為主機,但一旦某臺計算機作為主機后,連接到該機的其他同時制圖的計算機只能作為附機。他同時制圖的計算機只能作為附機。 系統(tǒng)要求必須有一臺計算機作為主機,并且只能有一個主機。只有當主機進入制作系統(tǒng)要求必須有一臺計
30、算機作為主機,并且只能有一個主機。只有當主機進入制作界面之后,其他附機才能進入制作界面。當主機退出制作界面之后,所有的附機界面之后,其他附機才能進入制作界面。當主機退出制作界面之后,所有的附機都將無法繼續(xù)制作。都將無法繼續(xù)制作。系統(tǒng)功能要求系統(tǒng)功能要求(1 1)圖形繪制:完成基本圖形繪制功能,如曲線、矩形、橢圓等。)圖形繪制:完成基本圖形繪制功能,如曲線、矩形、橢圓等。(2 2)圖像繪制:以透明方式顯示任意圖像,并能實現(xiàn)圖像的縮放。)圖像繪制:以透明方式顯示任意圖像,并能實現(xiàn)圖像的縮放。(3 3)文字繪制:能在任意位置顯示指定大小的文字,并能旋轉(zhuǎn)。)文字繪制:能在任意位置顯示指定大小的文字,并
31、能旋轉(zhuǎn)。(4 4)導出圖片:能將繪制的對象導出為)導出圖片:能將繪制的對象導出為jpgjpg圖像文件、并提供打印與打印預(yù)覽功能。圖像文件、并提供打印與打印預(yù)覽功能。(5 5)使用鼠標選中一個或多個圖形圖像對象時,可以移動或刪除選中的對象。)使用鼠標選中一個或多個圖形圖像對象時,可以移動或刪除選中的對象。(6 6)保存繪圖對象后,下次運行程序可以打開原來繪制的對象,并能在原來的基礎(chǔ)上)保存繪圖對象后,下次運行程序可以打開原來繪制的對象,并能在原來的基礎(chǔ)上繼續(xù)繪制,也可以修改已有的對象。繼續(xù)繪制,也可以修改已有的對象。(7 7)用戶可以在多臺機器上同時繪制同一張圖的不同部分,而且大家看到的界面是一
32、)用戶可以在多臺機器上同時繪制同一張圖的不同部分,而且大家看到的界面是一樣的。樣的。36設(shè)計指導(設(shè)計指導(9-29-2) 類設(shè)計類設(shè)計1 1繪圖對象類設(shè)計繪圖對象類設(shè)計為了統(tǒng)一管理各種繪圖對象,可以將要繪制的對象抽取成一個抽為了統(tǒng)一管理各種繪圖對象,可以將要繪制的對象抽取成一個抽象基類象基類DrawObjectDrawObject,而其他繪制的對象類則從,而其他繪制的對象類則從DrawObjectDrawObject繼繼承,在擴充類中,通過重寫承,在擴充類中,通過重寫DrawObjectDrawObject類的屬性和方法,即類的屬性和方法,即可實現(xiàn)針對特定圖形圖像的繪制??蓪崿F(xiàn)針對特定圖形圖
33、像的繪制。37設(shè)計指導(設(shè)計指導(9-29-2) 類設(shè)計類設(shè)計2 2工具類設(shè)計工具類設(shè)計當用戶使用鼠標拖放繪制、選中和移動對象時,都會用到窗體或控件的當用戶使用鼠標拖放繪制、選中和移動對象時,都會用到窗體或控件的MouseMoveMouseMove、MouseDownMouseDown和和MouseUpMouseUp事件。對于不同的對象,這些鼠標事件事件。對于不同的對象,這些鼠標事件中的實現(xiàn)代碼也不盡相同,為此需要提供一個實現(xiàn)圖形圖像鼠標控制的基中的實現(xiàn)代碼也不盡相同,為此需要提供一個實現(xiàn)圖形圖像鼠標控制的基類類ToolObject ToolObject 。38設(shè)計指導(設(shè)計指導(9-29-2
34、) 類設(shè)計類設(shè)計3 3其他類設(shè)計:其他類設(shè)計:公共類以及進行主機和附機通信的類的設(shè)計公共類以及進行主機和附機通信的類的設(shè)計(1 1)ObjectIDObjectID類提供為圖形圖像對象創(chuàng)建類提供為圖形圖像對象創(chuàng)建IDID的方法。的方法。(2 2)CCCC類提供系統(tǒng)公用的屬性和方法定義。類提供系統(tǒng)公用的屬性和方法定義。(3 3)GraphicsListGraphicsList類保存繪制對象的列表,同時實現(xiàn)繪圖對類保存繪制對象的列表,同時實現(xiàn)繪圖對象的查找、刪除、選擇等功能。繪制對象列表由象的查找、刪除、選擇等功能。繪制對象列表由ListList類型的字段來進行維護。類型的字段來進行維護。(4 4
35、)UserUser類封裝與服務(wù)器通信的客戶端信息。類封裝與服務(wù)器通信的客戶端信息。(5 5)MyClientMyClient類封裝附機的相關(guān)信息,提供附機向主機發(fā)送類封裝附機的相關(guān)信息,提供附機向主機發(fā)送信息以及從主機接收信息的相關(guān)處理方法。信息以及從主機接收信息的相關(guān)處理方法。(6 6)MyServerMyServer類封裝主機的相關(guān)信息,提供主機向附機發(fā)送類封裝主機的相關(guān)信息,提供主機向附機發(fā)送信息以及從附機接收信息的相關(guān)處理方法。信息以及從附機接收信息的相關(guān)處理方法。39設(shè)計指導(設(shè)計指導(9-39-3)主機和附機)主機和附機 在主機和附機的通信中,主機收到附機發(fā)送的字符信息在主機和附機
36、的通信中,主機收到附機發(fā)送的字符信息后,需要解析字符串的含義,并確定主機需要執(zhí)行的操后,需要解析字符串的含義,并確定主機需要執(zhí)行的操作。對于附機來說,亦是如此。字符串分為命令部分和作。對于附機來說,亦是如此。字符串分為命令部分和參數(shù)部分,命令部分和參數(shù)部分之間以及參數(shù)部分的各參數(shù)部分,命令部分和參數(shù)部分之間以及參數(shù)部分的各個參數(shù)之間均用逗號分隔。個參數(shù)之間均用逗號分隔。 主機發(fā)給附機的命令主機發(fā)給附機的命令 附機發(fā)給主機的命令附機發(fā)給主機的命令40設(shè)計指導(設(shè)計指導(9-49-4)具體實現(xiàn))具體實現(xiàn)畫板設(shè)計畫板設(shè)計 為了解決在為了解決在PanelPanel控件上繪圖的閃爍問題,使用用戶控件作為
37、控件上繪圖的閃爍問題,使用用戶控件作為繪圖畫板,然后將用戶控件的雙緩沖屬性繪圖畫板,然后將用戶控件的雙緩沖屬性【DoubleBufferedDoubleBuffered】的的值設(shè)置為值設(shè)置為truetrue即可。即可。【例例7 7】 創(chuàng)建多機聯(lián)合繪圖應(yīng)用程序,實現(xiàn)畫板的設(shè)計。創(chuàng)建多機聯(lián)合繪圖應(yīng)用程序,實現(xiàn)畫板的設(shè)計。2.2.多機同步控制多機同步控制 通過發(fā)送相應(yīng)的命令實現(xiàn)。通過發(fā)送相應(yīng)的命令實現(xiàn)?!纠? 8】 在例在例12-712-7的基礎(chǔ)上實現(xiàn)多機同步控制功能。的基礎(chǔ)上實現(xiàn)多機同步控制功能。41設(shè)計指導(設(shè)計指導(9-49-4)具體實現(xiàn))具體實現(xiàn)3.3.序列化與反序列化序列化與反序列化 繪
38、圖對象的序列化與反序列化有兩個用途:繪圖對象的序列化與反序列化有兩個用途:u一是傳輸圖像時要進行序列化與反序列化一是傳輸圖像時要進行序列化與反序列化u二是保存文件時需要序列化,打開文件時需要反序列化。二是保存文件時需要序列化,打開文件時需要反序列化。 最簡單的辦法就是給類添加最簡單的辦法就是給類添加SerializableSerializable特性特性 通過實現(xiàn)通過實現(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è)計指導(設(shè)計指導(9-49-4)具體實現(xiàn))具體實現(xiàn)4.4.圖像的打印和預(yù)覽圖像的打印和預(yù)覽打印功能的實現(xiàn)主要用到打印功能的實現(xiàn)主要用到PrintPreviewDialogPrintPreviewDialog對話框和對話框和PrintDocumentPrintDocument類。其中類。其中PrintPreviewDialogPrintPreviewDialog實現(xiàn)打印預(yù)覽實現(xiàn)打印預(yù)覽功能,功能,PrintDocumentPrintDocument實現(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高新技術(shù)產(chǎn)業(yè)股權(quán)股份合作合同
- 2025年度安全達標租賃住宅合同規(guī)范示例
- 二零二五年度知識產(chǎn)權(quán)轉(zhuǎn)讓代理合同種類及代理手續(xù)辦理
- 二零二五年度自媒體賬號內(nèi)容版權(quán)保護合作協(xié)議
- 二零二五年度運輸補充協(xié)議:物流園區(qū)車輛通行費用合同
- 汽車美容店裝修合同-@-1
- 農(nóng)場直供鮮奶運輸合同模板
- 杭州服裝店裝修合同參考
- 店鋪裝修居間合同范例
- 二零二五年度股權(quán)分配與員工福利保障協(xié)議
- 教育家精神專題講座課件
- 了解綠化廢棄物的分類和處理方法
- EPC項目投標人承包人工程經(jīng)濟的合理性分析、評價
- 項目投標BIM方案(投標專用)
- 社區(qū)電動車棚新(擴)建及修建充電車棚施工方案(純方案-)
- 統(tǒng)編版六年級語文下冊第一單元大單元整體作業(yè)設(shè)計含答案
- 2024年中考數(shù)學專題訓練 專題10 截長補短模型綜合應(yīng)用(知識解讀)
- 專利分析評議報告
- 員工招聘與人才引進培訓課件
- 裝配式預(yù)制剪力墻外墻板制作教學課件:預(yù)制外墻板生產(chǎn)流程
- 英語旅游文本的句式特點及其翻譯
評論
0/150
提交評論