2015-09-29 29 views
-1

我知道如何在GDI中繪製東西,但我發現很難確定如何繪製不僅僅是正方形和圓形的實際形狀。如何繪製隧道效果?

我想繪製一個隧道,只是繪製一堆正方形或矩形相互重疊,但我無法弄清楚如何正確定位。

如何繪製這種效果?

+2

你能澄清你的問題嗎?添加一些代碼示例以及所需結果的屏幕截圖可能會有所幫助。 –

+0

好的,我會用截圖更新我的問題。對不起,我現在沒有代碼,因爲我不知道從哪裏開始(我確實嘗試編寫一些代碼,但它是關閉的) – forloop

回答

1

你可以嘗試這樣的事情。一旦你理解了如何使用GDI進行繪製的基礎知識,你應該能夠很輕鬆地完成這樣的事情。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Autodraw 
{ 
    public partial class Form1 : Form 
    { 
     private bool canDraw; 

     public class NPanel : Panel 
     { 
      protected override bool DoubleBuffered 
      { 
       get 
       { 
        return base.DoubleBuffered; 
       } 

       set 
       { 
        base.DoubleBuffered = true; 
       } 
      } 
     } 

     public NPanel nPanel = new NPanel(); 

     public Form1() 
     { 
      InitializeComponent(); 

      this.DoubleBuffered = true; 
      panel = nPanel; 
     } 

     private void panel_Paint(object sender, PaintEventArgs e) 
     { 
      if (canDraw) 
      { 
       for (int r = 0; r <= 255; r++) 
       { 
        e.Graphics.DrawRectangle(new Pen(Color.FromArgb(r, 0, 0), 1), r, r, r, r); 
       } 

       for (int r = 0; r <= 255; r++) 
       { 
        e.Graphics.DrawRectangle(new Pen(Color.FromArgb(0, r, 0), 1), r, r, r, r); 
       } 

       for (int r = 0; r <= 255; r++) 
       { 
        e.Graphics.DrawRectangle(new Pen(Color.FromArgb(0, 0, r), 1), r, r, r, r); 
       } 
      } 
     } 

     private void timer_Tick(object sender, EventArgs e) 
     { 
      this.Refresh(); 
     } 

     private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if(e.KeyChar == (char)Keys.Escape) 
      { 
       timer.Stop(); 
       canDraw = false; 
      } 
     } 

     private void Form1_Shown(object sender, EventArgs e) 
     { 
      canDraw = true; 
      timer.Start(); 
     } 
    } 
} 
+0

這個例子假設你在'Form'上有一個'Panel',它是命名爲「面板」。 – username

+0

哇,謝謝你,這正是我在想什麼。你怎麼知道我在問這個?我是否需要提供此代碼的歸屬? – forloop

+0

嗯,你說的是「重疊的矩形」,並且因爲這在過去是一個相當常見的效果,所以首先想到的是這個。對於歸屬地,請查看此頁面:http://stackoverflow.com/help/licensing – username