• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC.NET的GDI+編程入門教程之圖形

    發表于:2007-05-25來源:作者:點擊數: 標簽:編程VC.NETGDI+入門教程圖形
    基于直線的圖形 一、等邊圖形 (一)長方形和正方形 長方形是由四條邊組成的具有四個直角的幾何圖形,為了繪制一個長方形,可以定義圍成長方形的矩形值,或定義它的位置和尺寸。為了畫一個矩形圍成的長方形,可以使用Graphics::DrawRectangle()方法。 public
    基于直線的圖形

      一、等邊圖形

     ?。ㄒ唬╅L方形和正方形

      長方形是由四條邊組成的具有四個直角的幾何圖形,為了繪制一個長方形,可以定義圍成長方形的矩形值,或定義它的位置和尺寸。為了畫一個矩形圍成的長方形,可以使用Graphics::DrawRectangle()方法。

    public: void DrawRectangle(Pen *pen, Rectangle rect);

      類似的長方形可以按照如下說明:


    圖一、長方形說明圖示

      定義過一個矩形變量后,可以將它傳遞給上述的方法,例子代碼如下:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
    Pen *penCurrent = new Pen(Color::Red);
    Rectangle Rect(20, 20, 248, 162);
    e->Graphics->DrawRectangle(penCurrent, Rect);
    }

      需要注意的是,也可以在方法的括號內定義畫筆或矩形對象。

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
    e->Graphics->DrawRectangle(new Pen(Color::Red), Rectangle(20, 20, 248, 162));
    }

      這將產生如下效果圖:


    圖二、繪制的長方形效果圖

      一定要記住,矩形對象的第三個參數代表的是矩形的寬度,第四個參數代表的矩形的高度,這對于那些使用過GDI編程的人來說是容易混淆的一點。GDI+定義的矩形對象與GDI定義的矩形對象是有區別的。實際上,為了定義所要畫的長方形的位置和尺寸,Graphics類提供了如下版本的DrawRectangle()方法:

    public: void DrawRectangle(Pen *pen, int x, int y, int width, int height);
    public: void DrawRectangle(Pen *pen, float x, float y, float width, float height);

      這次,長方形對象用一個定位點和它的寬度、高度來表示。這可以用如下的Windows坐標系統進行說明。


    圖三、Windows坐標系統

      在此基礎上,上述的長方形可以按照如下方法進行繪制:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     e->Graphics->DrawRectangle(new Pen(Color::Red), 20, 20, 248, 162);
    }

      正方形是四個邊都相等的長方形,是長方形的特例。

     ?。ǘ┮幌盗械拈L方形

      DrawRectangle()方法用于繪制一個長方形,如果打算繪制很多的矩形的話,你可以向前一步地,用Graphics::DrawRectangles()方法,它有兩個版本,語法如下:

    public: void DrawRectangles(Pen *pen, Rectangle rects[]);
    public: void DrawRectangles(Pen *pen, RectangleF rects[]);

      這個方法需要一個Rectangle 或 RectangleF數組。它根據數組的不同的成員值繪制不同的長方形。下面是一個例子代碼:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Red);
     Rectangle Rect[] = { Rectangle(20, 20, 120, 20),
       Rectangle(20, 50, 120, 30),
       Rectangle(20, 90, 120, 40),
       Rectangle(20, 140, 120, 60) };
     e->Graphics->DrawRectangles(penCurrent, Rect);
    }

      上述代碼產生如下的效果:


    圖四、一系列長方形效果圖



      二、線條

     ?。ㄒ唬┮粭l直線

      直線連接了兩個點,這意味著直線有起點和終點。


    圖五、直線示意圖

      起點和終點是截然不同的兩個點,正是基于這一點,直線也可以用兩個點(Ponit)來表示,或者用笛卡爾坐標系中的四個坐標數值表示。Graphics提供了以下重載的DrawLine()方法來繪制一條直線,:

    public: void DrawLine(Pen *pen, Point pt1, Point pt2);
    public: void DrawLine(Pen *pen, PointF pt1, PointF pt2);
    public: void DrawLine(Pen *pen, int x1, int y1, int x2, int y2);
    public: void DrawLine(Pen *pen, float x1, float y1, float x2, float y2);

      如果直線用自然數表示,它的起點可以用pt1表示,終點用點pt2表示,如果直線用實數繪制,它在PointF pt1處開始,在PointF pt2處結束?;蛘?,可以用坐標(x1, y1)來表示起點,用坐標(x2, y2)表示終點。同樣類型的直線可以用十進制數從點(x1, y1) 處到點 (x2, y2).處。

      下面的代碼畫了三條直線:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawLine(penCurrent, 20, 20, 205, 20);
     penCurrent = new Pen(Color::Green);
     e->Graphics->DrawLine(penCurrent, 40, 40, 225, 40);
     penCurrent = new Pen(Color::Blue);
     e->Graphics->DrawLine(penCurrent, 30, 60, 215, 60);
    }


    圖六:繪制三條直線

     ?。ǘ┮幌盗兄本€

      上述的DrawLine()方法用來畫一條直線,如果打算一次畫一組直線的話,可以使用Graphics::DrawLines()方法,它重載了兩個版本:

    public: void DrawLines(Pen *pen, Point points[]);
    public: void DrawLines(Pen *pen, PointF points[]);

      為了使用這種方法,需要使用代表笛卡爾坐標的自然數定義Point數組,或只用實數定義PointF數組,例子代碼如下:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Point Coordinates[] = { Point(20, 10), Point(205, 20),
     Point(40, 40), Point(225, 60),
     Point(30, 80), Point(215, 100) };

     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawLines(penCurrent, Coordinates);
    }

      這將產生如下的效果:


    圖七、系列直線效果圖


      三、多邊形

      多邊形是如若干個直線互聯所圍成的圖形,換句話說,多邊形有多個直線定義,除了第一根直線外,所有直線的起點都是前一根直線的終點,最后一根直線的終點是第一根直線的起點。

      為了畫多邊形,可以使用Graphics::Polygon()方法,它重載了兩個版本:

    public: void DrawPolygon(Pen *pen, Point points[]);
    public: void DrawPolygon(Pen *pen, PointF points[]);

      使用這個方法時,首先聲明一個Point 或 PointF類型的數組,并將它傳遞給函數的第二個參數。下面是一個例子的代碼:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Point Pt[] = { Point(20, 50), Point(180, 50), Point(180, 20),
      Point(230, 70), Point(180, 120), Point(180, 90),
      Point(20, 90) };
     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawPolygon(penCurrent, Pt);
    }

      這個將產生如下效果:


    圖八、多邊形效果圖


      基于圓的圖形

      一、橢圓與圓

      連續彎曲的線條圍成了橢圓。橢圓上的每一個點都相對于中心點來說都存在一個對稱點,下圖對它進行了說明:


    圖九、橢圓示意圖

      因為一個橢圓可以放入到一個矩形中,所以在GDI+編程中,橢圓用它的外接矩形來定義。為了畫一個橢圓,可以使用Graphics::DrawEllipse()方法,這個方法有四個版本:

    public: void DrawEllipse(Pen *pen, Rectangle rect);
    public: void DrawEllipse(Pen *pen, RectangleF rect);
    public: void DrawEllipse(Pen *pen, int x, int y, int width, int height);
    public: void DrawEllipse(Pen *pen, float x, float y, float width, float height);


    圖十、函數參數示意圖

      這種方法參數的含義與Graphics::DrawRectangle()方法參數的含義是一樣的。

      這里是一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawEllipse(penCurrent, Rectangle(20, 20, 226, 144));
    }


    圖十一、代碼運行效果圖

      二、餅圖

      餅圖是用一個起始角度和終止角度定位的橢圓的一部分,示意圖如下:


    圖十二、餅圖示意圖

      為了畫一個餅圖,可以用Graphics::DrawPie()方法,它有下列的幾個版本:

    public: void DrawPie(Pen *pen, Rectangle rect,float startAngle,float sweepAngle);
    public: void DrawPie(Pen *pen, RectangleF rect, float startAngle,float sweepAngle);
    public: void DrawPie(Pen *pen,int x,int y,int width,int height, int startAngle, int sweepAngle);
    public: void DrawPie(Pen *pen, float x, float y, float width, float height, float startAngle, float sweepAngle);

      餅圖是基于橢圓的,橢圓所外接的矩形將作為rect參數傳遞,矩形也可以用定位點和尺寸來定義。

      對于所要繪制的橢圓的外接矩形中,可以設定一個起始角度,這個角度是按照順時針方向從0度開始計算的(就象一個模擬鐘一樣)。這意味著90度在6點鐘方向而不是在12點鐘方向。這個開始的角度作為startAngle參數來傳遞。

      定義過起始角度后,還要定義餅圖所覆蓋的角度,這也是按照順時針計算的。這個值使用sweepAngle參數來傳遞。

      下面有個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawPie(penCurrent, 20, 20, 200, 100, 45, 255);
    }

      代碼運行效果如下:


    圖十三、餅圖效果


      三、弧線

      弧線是橢圓的一部分,這意味著弧線是一個非封閉的橢圓。盡管餅圖是一個封閉的圖形,但弧線不是。它僅僅是定義橢圓的邊線部分。因為弧線必須與橢圓一致,它被定義為適應外接矩形,這可以用下圖來說明:


    圖十四、弧線示意圖

      為了支持弧線,Graphics 類提供了DrawArc()方法,這個方法定義了四個版本:

    public: void DrawArc(Pen *pen, Rectangle rect, float startAngle, float sweepAngle);
    public: void DrawArc(Pen *pen, RectangleF rect, float startAngle, float sweepAngle);
    public: void DrawArc(Pen *pen, int x, int y, int width, int height, int startAngle, int sweepAngle);
    public: void DrawArc(Pen *pen, float x, float y, float width, float height, float startAngle, float sweepAngle);

      含有弧線的橢圓必須在Rectangle或 RectangleF矩形內進行繪制,也可以用外接矩形的坐標、尺寸來定義橢圓,弧線必須與外接矩形相匹配外,還必須定義起始角度(起始點與X軸的順時針角度)?;【€還要定義從起始點順時針所掃過的角度,這兩個值與Graphics::Pie()方法中的值含義一樣 ,下面是例子代碼:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Red);
     e->Graphics->DrawArc(penCurrent, 20, 20, 200, 150, 225, 200);
    }


    圖十五、程序效果圖


      基于曲線的圖形

      一、曲線

      曲線是連接兩點或多點的線條,如果僅僅涉及兩個點,線條將把它們連接在一起,但這個線條不是直的。如果有三個點A、B、C,這條線將從A點開始,穿過B點,結束于C點。如果多于三個點,這條線將起始與第一個點,依次穿過中間的若干點,結束于最后的點。曲線中的點不必排成一條直線,實際上,繪制曲線的整體思想是用非直的線條連接不在一條直線上的點,下圖的C 1、C2、C3可以說明這一點:


    圖十六、曲線示意圖

      曲線C1包括兩個點,曲線C2包括3個點,曲線C3包括4個點。

      兩點間的部分稱為線段。這也意味著曲線可以由包含的線段的個數來進行區分。如果一個曲線僅僅由兩個點構成,這意味著它只有一個線段,連接著第一、第二個點,如果一個曲線包括三個點,它有兩個線段,第一個線段跨越第一、第二個點,第二個線段跨越第二、第三個點。綜上所述,曲線的線段數等于點數減去一。

      GDI+中使用Graphics::DrawCurve()方法畫曲線,在畫一個曲線時,必須說明所涉及到的點數,這意味著首先要聲明一個Point 或PointF數組,正是考慮到這一點,Graphics類定義的DrawCurve()的方法如下:

    public: void DrawCurve(Pen *pen, Point points[]);
    public: void DrawCurve(Pen *pen, PointF points[]);

      這個版本的方法使用了Point 或 PointF值作為參數,數組的成員數由你規定,這里有一個例子使用四個點來繪制一個含有三個線段的曲線:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
    Pen *penCurrent = new Pen(Color::Blue);
    Point pt[] = { Point( 40, 42), Point(188, 246),
    Point(484, 192), Point(350, 48) };
    e->Graphics->DrawCurve(penCurrent, pt);
    }

      它的效果圖如下所示:


    圖十七、曲線效果圖

      正如你所見到的,當畫一個曲線時,一個彎曲的線條穿越起始點和終點之間的中間點,為了使線條是非直的,編譯器使用一個稱為張力的值來彎曲線條,這個張力值可以通過定義彎曲系數的形式來修改,為了這么做,使用下列版本的DrawCurve()方法:

    public: void DrawCurve(Pen *pen, Point points[], float tension);
    public: void DrawCurve(Pen *pen, PointF points[], float tension);

      彎曲程度由張力參數決定,它可以是大于等于0.00的十進制數,如果該值等于0.00,將畫一個直線。下面是一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt[] = { Point(40, 42), Point(188, 246),Point(484, 192), Point(350, 48) };
     e->Graphics->DrawCurve(penCurrent, pt, 0.00F);
    }


    圖十八、代碼運行效果圖

      這意味著,如果想畫一個真正的曲線,或者是不傳遞張力參數,使用這個方法的第一個版本,或者是傳遞的張力的參數值大于0.00。這里有個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt[] = { Point(40, 42), Point(188, 246),Point(484, 192), Point(350, 48) };
     e->Graphics->DrawCurve(penCurrent, pt, 2.15F);
    }

      這將產生如下效果:


    圖十九、代碼運行效果圖

      DrawCurve()方法的兩個版本準許在開始的第一個點繪制曲線,下面的例子使用了5個點,產生了4個線段:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     PointF pt[] = { PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242), PointF(275, 28),
     PointF(380.00F, 322.00F) };
     e->Graphics->DrawCurve(penCurrent, pt);
    }

      效果如圖所示:


    圖二十、代碼運行效果圖

      如果需要的話,可以隨意在任意一個點開始曲線,為了支持這一點,Graphics類提供了以下版本的DrawCurve()方法:

    public: void DrawCurve(Pen *pen, PointF[] points, int offset, int numberOfSegments);

      offset參數用來規定在開始繪制之前跳需要躍過的點數,首先需要決定的就是offset參數必須設置為0或者更高的數,如果將這個參數設置為0,曲線將從第一個點開始繪制。如果這個參數設置為1,第一個點將不包含在曲線之內。這意味著曲線從第二個點開始繪制,以此類推。如果設置為2,第一和第二個點都不在曲線內,曲線從第三個點開始。

      通過offset參數規定曲線的起點后,然后就需要設定曲線的段數,這個段數必須要小于可用的段數,它等于所有段落數減去offset值。下面是一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     PointF pt[] = { PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242), PointF(275, 28),
    PointF(380.00F, 322.00F) };
     e->Graphics->DrawCurve(penCurrent, pt, 1, 2);
    }

      效果圖如下:


    圖二十一、代碼運行效果圖

      再一次,編譯器在繪制曲線時需要申請張力,如果愿意使用一個直線段或使用一個不同于默認值的張力的話,可以使用下列版本的Graphics::DrawCurve()方法:

    public: void DrawCurve(Pen *pen, Point[] points, int offset, int numberOfSegments, float tension);
    public: void DrawCurve(Pen *pen, PointF[] points, int offset, int numberOfSegments, float tension);

      這次,你可以傳遞0值給張力,以此來得到直線,代碼如下:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     PointF pt[] = { PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242), PointF(275, 28),PointF(380.00F, 322.00F) };
     e->Graphics->DrawCurve(penCurrent, pt, 0, 4, 0);
    }

      效果如圖:


    圖二十二、代碼運行效果圖

      也可以向張力參數傳遞任何正值,這有個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     PointF pt[] = { PointF(20.00F, 322.00F), PointF(124, 24), PointF(214, 242), PointF(275, 28),
    PointF(380.00F, 322.00F) };
     e->Graphics->DrawCurve(penCurrent, pt, 1, 3, 1.750F);
    }

      效果如圖:


    圖二十三、代碼運行效果圖


      二、貝賽爾曲線

      貝賽爾曲線是用四個點(不必在一條直線上)繪制的連續曲線,它可以用下圖來說明:


    圖二十四、貝賽爾曲線

      為了繪制這個線條(使用四個點),編譯器將從第一點到第四個點畫一條曲線,但是它并不經過第二、第三個點,而只是通過彎曲曲線來使中間的側邊各自接近于第二、第三個點。例如,上述的貝賽爾曲線使用了如下的四個點進行繪制:


    圖二十五、貝賽爾曲線繪制說明圖

      為了繪制貝賽爾曲線,Graphics類提供了DrawBezier()方法,它重載了以下版本:

    public: void DrawBezier(Pen *pen, Point pt1, Point pt2, Point pt3, Point pt4);
    public: void DrawBezier(Pen *pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4);
    public: void DrawBezier(Pen *pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);

      在此基礎上,繪制貝賽爾曲線時可以使用四個Point 或PointF值,也可以使用四個點的坐標值。下面有一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt1 = Point(20, 12), pt2 = Point(88, 246), pt3 = Point(364, 192), pt4 = Point(250, 48);
     e->Graphics->DrawBezier(penCurrent, pt1, pt2, pt3, pt4);
    }

      效果圖如下:


    圖二十六、貝賽爾曲線效果圖

      三、一系列貝賽爾曲線

      Graphics::DrawBezier()方法用來繪制一條貝賽爾曲線,如果想繪制一系列貝賽爾曲線,可以用Graphics::DrawBeziers()方法,它重載了兩個版本:

    public: void DrawBeziers(Pen *pen, Point points[]);
    public: void DrawBeziers(Pen *pen, PointF points[]);

      DrawBeziers()方法需要一個Point 或 PointF數組值。當僅僅處理四個點時,DrawBeziers() 方法與 DrawBezier()很相似。區別是DrawBezier()處理的是四個Point 或 PointF的值,DrawBeziers()處理的是Point 或 PointF數組值。使用DrawBeziers()方法可以繪制出與上面曲線一樣的效果,代碼如下:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt[] = { Point(20, 12), Point(88, 246), Point(364, 192), Point(250, 48) };
     e->Graphics->DrawBeziers(penCurrent, pt);
    }

      使用DrawBeziers()方法的一個典型特點是它允許使用7個Point或PointF值,這里有一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt[] = { Point( 10, 5), Point(340, 60), Point(320, 148), Point(150, 120), Point(24, 220), Point(250, 150), Point(304, 240) };
     e->Graphics->DrawBeziers(penCurrent, pt);
    }

      效果圖如下:


    圖二十七、代碼運行效果圖


      四、封閉曲線

      使用DrawLines()、DrawBezier()或 DrawBeziers()方法將得到一條或一系列有起點有終點的直線或曲線,GDI+也允許繪制一系列的線段,但是最后的線段的終點和第一條線段的起點是連接在一起的,形成了一個封閉的圖形。為了繪制這種圖形,可以使用Graphics::DrawClosedCurve()方法,該方法重載了四個版本,其中的兩個版本語法如下:

    public: void DrawClosedCurve(Pen *pen, Point points[]);
    public: void DrawClosedCurve(Pen *pen, PointF points[]);

      這兩個版本非常容易使用,它們允許你提供4個Point 或PointF值的數組,在執行過程中,每一種版本都將繪制一條曲線,穿過每一個點,并連接終點和起點,這里有個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     Pen *penCurrent = new Pen(Color::Blue);
     Point pt[] = { Point(40, 42), Point(188, 246), Point(484, 192), Point(350, 48) };
     e->Graphics->DrawClosedCurve(penCurrent, pt);
    }

      代碼運行效果如下圖:


    圖二十八、代碼運行效果圖

      上兩個版本用來繪制線條,但對線條進行彎曲處理以使圖形看起來平滑,如果需要的話,可以畫直線來連接各點,而不必進行彎曲處理?;谶@種假定,上面的形狀將顯示如下:


    圖二十九、直線連接的封閉圖形

      為了繪制這種類型的圖形,需要使用ClosedCurve()方法,可以使用以下版本:

    public: void DrawClosedCurve(Pen *pen, Point points[], float tension, FillMode fillmode);
    public: void DrawClosedCurve(Pen *pen, PointF points[], float tension, FillMode fillmode);

      這些版本可以規定張力大小及填充模式,張力系數使你可以定義曲線的實際形狀,如果這個值是零的話,各個點將用直線進行互聯。填充模式因數用來定義內部的曲線如何來填充,這由FillMode枚舉來進行控制,它定義在System::Drawing::Drawing2D命名空間中。枚舉FillMode有兩個值,Alternate 和Winding,這里有一個例子:

    private: System::Void Form1_Paint(System::Object * sender,
    System::Windows::Forms::PaintEventArgs * e)
    {
     using namespace System::Drawing::Drawing2D;
     Pen *penCurrent = new Pen(Color::Red);
     Point pt[] = { Point(40, 42), Point(188, 246), Point(484, 192), Point(350, 48) };
     e->Graphics->DrawClosedCurve(penCurrent, pt, 0.75F, FillMode::Winding);
    }

      這將產生影響如下效果圖:


    圖三十、代碼運行效果圖

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>