2013-12-25 4 views
1

Увидев, что рисунок на рабочем столе очень грязный, я решил просто исследовать его. Я понял, что многие люди предлагают создать прозрачный WinForm, который является размером экрана и при этом ударяет панель, и используя это для рисования графики. Поэтому я проверил его, но столкнулся с множеством ошибок. Сначала моя вторая форма (Form2) не показывалась, поэтому мне пришлось поместить ее в другой поток и поставить Form2.ShowDialog(); на этот поток. После того, как я убрал эту проблему, я фактически подошел к панели. Теперь моя форма никогда не будет отображаться, но я вижу, что она работает на панели задач. Каждый раз, когда я пытаюсь сделать это сфокусированным окном, он никогда не работает, и всякий раз, когда я нахожу задачу, я вижу, как создаётся графика. Мой вопрос: можно ли нарисовать панель на прозрачной WinForm и сделать ее видимой? Вот код, который я использовал, в основном для поиска ошибок (рисование состояний и прочее).Могу ли я рисовать на панели прозрачной WinForm?

void Draw() 
    { 
     while (true) 
     { 
      SolidBrush redpen = new SolidBrush(Color.Red); 
      Font font = new Font("Arial", 16); 
      PointF point = new PointF(700, 150); 
      Graphics g = panel1.CreateGraphics(); 

      g.DrawString(Main.state.ToString(), font, redpen, point); 

      Main.beginTime.Stop(); 
      Main.TimeRan = Main.beginTime.Elapsed; 

      string amountOfTime = string.Format("{0:00}:{1:00}:{2:00}.{3:00}", Main.TimeRan.Hours, Main.TimeRan.Minutes, Main.TimeRan.Seconds, Main.TimeRan.Milliseconds/10); 
      point = new PointF(700, 200); 

      g.DrawString(amountOfTime, font, redpen, point); 

      Thread.Sleep(10); 
      panel1.Refresh(); 
     } 
    } 

    private void Form2_Shown(object sender, EventArgs e) 
    { 
     Draw(); 
    } 

Где-то в главном классе

// In a method 
    Thread F2T = new Thread(FormHandlers); 
    F2T.Start(); 

    private void FormHandlers() 
    { 
     Form2 Form2 = new Form2(); 
     Form2.Opacity = 0.00; 
     Form2.ShowDialog(); 
    } 

Edit: После некоторого тестирования я заметил, что с уменьшением непрозрачности Непрозрачность Письма уменьшается, а, я могу это сделать так, чтобы панель прозрачна, но строка, которую я рисую, чтобы рисовать внутри, не так ли?

+0

Что вы хотите нарисовать по форме? –

+0

Моя программа основана на состоянии, поэтому текущее состояние включено и количество времени прошло – Ipwnusck

ответ

4

Я думаю, вы хотите нарисовать сообщение на прозрачной дочерней форме? если это, я думаю, вы могли бы сделать так: потому что form.Opacity =0.00 делает все элементы управления в нем прозрачными, поэтому мы ничего не видим. Другой способ, мы используем form.TransparencyKey, чтобы получить это. такой код:

public Form2() 
    { 
     InitializeComponent(); 
     //hide the border of form 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
     this.BackColor = Color.White; 
     //set the TransparencyKey the same as the back color 
     this.TransparencyKey = this.BackColor; 
    } 

protected override void OnPaint(PaintEventArgs e) 
    { 
     SolidBrush redpen = new SolidBrush(Color.Red); 
     Font font = new Font("Arial", 16); 
     PointF point = new PointF(400, 150); 
     Graphics g = e.Graphics; 
     string state = "running"; 
     g.DrawString(state, font, redpen, point); 
     string amountOfTime = string.Format("{0:00}:{1:00}:{2:00}.{3:00}", 1, 2, 3, 11111/10); 
     PointF point2 = new PointF(500, 150); 
     g.DrawString(amountOfTime, font, redpen, point2); 

     //base.OnPaint(e); 
    } 

, кстати, вы хотите, чтобы показать сообщение в виде ребенка, я не предпочитаю использовать многопоточность, просто вызовите Form2 в Show() не в ShowDialog() и установить Form2.TopMost=True , чем вы можете управлять своей основной формой. попробуй. Мой результат резец: result of transparent drawing.

+0

Я просто пробовал это сегодня, это не сработало. – Ipwnusck

+0

Вы можете вставить свой текущий код? и описать вашу проблему, я помогу вам исправить это. если вы хотите предоставить более подробную информацию, отправьте письмо: [email protected] –

Смежные вопросы