Jeśli myślisz o tym, liczba prymitywów potrzebnych do narysowania notacji muzycznej jest dość mała, szczególnie jeśli nie masz ochoty. Wszystko, co w zasadzie potrzebne jest:
- linie pionowe (uwaga łodygi)
- poziome linie (linie personelu)
- Owale pełne i nakreślone (reprezentujące notatki)
- Sharp i Mieszkania są już dostępne dla Ciebie z # i b
Istnieje kilka bardziej wyszukanych symboli, które pominąłem, takie jak wysokie tony, znaczniki basowe, ale te, które można sera z T i B lub znaleźć bardziej wyszukaną czcionkę, która może działać.
Bardzo prosty, przykładowy kod, aby dostać się zaczęło:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
public partial class MusicForm : Form
{
public MusicForm()
{
InitializeComponent();
}
private int _staffHght = 15;
private int _noteHght = 12;
private int _noteWdth = 20;
private Pen _notePen = new Pen(Color.Black, 2);
private Brush _noteBrush = Brushes.Black;
private void musicPanel_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
// draw some staff lines
for (int i = 1; i < 6; i++)
g.DrawLine(Pens.Black, 0, i * _staffHght, musicPanel.Width, i * _staffHght);
// draw four semi-random full and quarter notes
g.DrawEllipse(_notePen, 10, 2 * _staffHght, _noteWdth, _noteHght);
g.DrawEllipse(_notePen, 50, 4 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 100, 2 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 150, 4 * _staffHght, _noteWdth, _noteHght);
}
}
Funkcja ta farba będzie oczywiście musiał być o wiele bardziej dynamiczna: pełne pętle na swoich zbiorów prymitywów ...
Wow dobry projekt. To brzmi interesująco! –
+1 dla syna :-) – chiccodoro
Zaakceptowałem odpowiedź na Unicode. Jedyne, co wciąż próbuję uzyskać, to jak odwrócić ćwierćnuta do góry nogami. – JeffJak