Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.7
Programarea in Windows (C#)
A efectuat:
A verificat:
lect., univ. Lisnic Inga
Chisinau 2017
Teme:
1. Aplicatii – Windows.
2. Interfaţa GDI.
3. Curbe Bezier.
4. Principiile de lucru cu tastatura.
5. Principiile de lucru cu mouse-ul.
6. Ceasul sistemului Windows
Scopul lucrarii:
1. Studierea bazelor şi principiilor de creare a aplicaţiilor Windows in C#
2. De a studia primitivele oferite de interfaţa GDI
3. De a studia primitivele grafice ce permit afişarea curbelor Bezier şi afişarea acestor curbe cu ajutorul
formulelor.
4. De a studia metodele şi principiile de lucru cu tastatura. Însuşirea modului de prelucrare a mesajelor
parvenite de la tastatură
5. De studiat metodele şi principiile de lucru cu mouse-ul; de însuşit modul de prelucrare a
mesajelor parvenite de la mouse
6. De a studia metodele şi principiile de lucru cu timer-ul
Sarcina de lucru:
1. Creaţi o aplicaţie Windows in C# în centrul zonei client al căreia este afişat un mesaj ”Lucrarea de
laborator al studentului ...”. La redimensionarea ferestrei, mesajul trebuie sa fie afişat în centrul zonei
client.
2. Scrieţi un program in C# care afişează în zona client un desen animat, utilizând toate primitivele
GDI.
3. Scrieţi un program in C# care afişază curba Bezier, utilizând funcţiile GDI standarde şi o curbă
Bezier, afişată după calcule prin formule.
4. De scris un program in C# care în zona clienbt afişează un desen, care poate fi mişcat cu ajutorul
tastelor ← (la stânga), ↑(în sus), →(la dreapta), ↓(în jos). De asemenea, trebuie să fie prevăzute taste
pentru rotirea figurii
5. 1. De modificat programul din lucrarea de laborator nr. 3 astfel ca punctele de control al
curbei Bezier să poată fi deplasate, schimbînd forma curbei în timp real.
2. De modificat programul din lucrarea nr. 4 astfel ca desenul să poată fi mişcat cu ajutorul mouse-lui.
6. De scris un program in C#, care realizează următoarele:
1. un ceas digital (Ora:Min:Sec), utilizând timer-ul pentru reînnoirea la fiecare secundă.
2. un ceas analogic (de desenat ciferblatul şi arcele, utilizând primitivele GDI), utilizând timer-ul pentru
reînnoirea la fiecare secundă
1
Notiuni teoretice
C# deriva din doua dintre cele mai de succes limbaje de programare: C si C++. De asemenea, limbajul
este o “ruda” apropiata a limbajului Java. Pentru o mai buna intelegere a limbajului C# este interesant
de remarcat care este natura relatiilor acestuia cu celelalte trei limbaje mentionate mai sus. Pentru
aceasta, vom plasa mai intai limbajul C# in contextul istoric determinat de cele trei limbaje. De la C,
C# mosteneste sintaxa, multe din cuvintele cheie si operatorii. De asemenea, C# construieste peste
modelul de obiecte definit in in C++. Relatia dintre C# si Java este mai complicata. Java deriva la
randul sau din C si C++. Ca si Java, C# a fost proiectat pentru a produce cod portabil. Limbajul C# nu
deriva din Java. Intre C# si Java exista o relatie similara celei dintre “veri”, ele deriva din acelasi
stramos, dar deosebinduse prin multe caracteristici importante. Limbajul C# contine mai multe
facilitati novatoare, dintre care cele mai importante se refera la suportul incorporat pentru componente
software. C# dispune de facilitati care implementeaza direct elementele care alcatuiesc componentele
software, cum ar fi proprietatile, metodele si evenimentele. Poate cea mai importanta facilitate de care
dispune C# este posibilitatea de a lucra intr-un mediu cu limbaj mixt.
Rezultatele obtinute
2
Listingul programului (2)
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 labnr2._2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
Pen blackPen = new Pen(Color.Black, 2);
e.Graphics.DrawLine(blackPen, 50, 350, 250, 450);
e.Graphics.FillRectangle(Brushes.Purple, new Rectangle(50, 150, 200, 100));
}
}
}
Rezultatele obtinute
3
Listingul programului (3)
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 labnr3._3
{ public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List<Point> points = new List<Point>
{
new Point { X = 0, Y = 200 },
}
}
4
Rezultatele obtinute
namespace labnr4._4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected List<Point> sheep = new List<Point>
{
new Point { X = 0, Y = 0 },
new Point { X = 100, Y = 100 },
new Point { X = 100, Y = 100 },
new Point { X = 100, Y = -100 },
}.Select(x => Point.Add(x, new Size(450, 250))).ToList();
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillPolygon(Brushes.Purple, sheep.ToArray());
sheep.ForEach(x => e.Graphics.FillRectangle(Brushes.Red, x.X, x.Y, 0, 0));
5
}
protected override void OnResizeBegin(EventArgs e)
{
last = Size;
}
private Size last;
protected override void OnKeyDown(KeyEventArgs e)
{
Size diff = new Size();
double angle = 0;
switch (e.KeyCode)
{
case Keys.Up:
diff = new Size(0, -10);
break;
case Keys.Down:
diff = new Size(0, 10);
break;
case Keys.Left:
diff = new Size(-10, 0);
break;
case Keys.Right:
diff = new Size(10, 0);
break;
case Keys.A:
angle = -10;
break;
case Keys.D:
angle = 10;
break;
}
var point = sheep.First();
sheep = sheep.Select(x => Point.Add(x.Rotate(point, angle), diff)).ToList();
this.Invalidate();
}
}
}
Rezultatele obtinute
6
Listingul programului (5)
using labnr4._4;
using FormLab3 = labnr3._3.Form1;
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 labnr5._5
{
public partial class FormLab5 : Form1
{
private FormLab3 bezierOnPaint = new FormLab3();
public FormLab5(): base()
{
InitializeComponent();
}
private List<Point> points => this.bezierOnPaint.Points;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.bezierOnPaint.CallOnPaint(e);
}
protected Point? clickedPoint = null;
protected override void OnMouseDown(MouseEventArgs e)
{
if (MouseButtons.HasFlag(MouseButtons.Left))
{
const int V = 20;
var clicked = points.FirstOrDefault(
x =>
x.X >= e.Location.X - V &&
x.X <= e.Location.X + V &&
x.Y >= e.Location.Y - V &&
x.Y <= e.Location.Y + V
7
);
if (clicked == null || clicked.IsEmpty)
{
return;
}
clickedPoint = clicked;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (clickedPoint != null)
{
points[points.IndexOf(clickedPoint.Value)] = e.Location;
this.Invalidate();
clickedPoint = null;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (MouseButtons.HasFlag(MouseButtons.Right))
{
var diff = new Size(
e.Location.X - this.sheep.First().X,
e.Location.Y - this.sheep.First().Y
);
this.sheep = this.sheep.Select(x => Point.Add(x, diff)).ToList();
this.Invalidate();
}
if (clickedPoint != null)
{
lock (points)
{
points[points.IndexOf(clickedPoint.Value)] = e.Location;
clickedPoint = e.Location;
this.Invalidate();
}
}
}
}
}
Rezultatele obtinute
8
Listingul programului (6)
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 labnr6._6
{
public partial class Form1 : Form
{
Timer t = new Timer();
int WIDTH = 300, HEIGHT = 300, secHAND = 140, minHAND = 110, hrHAND = 80;
Bitmap bmp;
Graphics g;
public Form1()
{
InitializeComponent();
}
cx = WIDTH / 2;
9
cy = HEIGHT / 2;
this.BackColor = Color.White;
t.Interval = 1000;
t.Tick += new EventHandler(this.t_Tick);
t.Start();
}
g = Graphics.FromImage(bmp);
int ss = DateTime.Now.Second;
int mm = DateTime.Now.Minute;
int hh = DateTime.Now.Hour;
string time = "";
g.Clear(Color.White);
10
g.DrawString("6", new Font("Arial", 14), Brushes.Red, new PointF(142,
280));
g.DrawString("7", new Font("Arial", 10), Brushes.Black, new PointF(73,
263));
g.DrawString("8", new Font("Arial", 10), Brushes.Black, new PointF(22,
212));
g.DrawString("9", new Font("Arial", 14), Brushes.Red, new PointF(0, 140));
g.DrawString("10", new Font("Arial", 10), Brushes.Black, new PointF(20,
71));
g.DrawString("11", new Font("Arial", 10), Brushes.Black, new PointF(70,
22));
g.DrawString("12", new Font("Arial", 14), Brushes.Red, new PointF(138,
2));
pictureBox1.Image = bmp;
g.Dispose();
}
Rezultatele obtinute
Concluzii
In urma efectuarii acestei lucrari in C# am facut cunostinta cu crearea aplicatiilor Windows ,crearea
ferestrelor, prelucrarea mesajelor.Am facut cunostinta cu utilizarea timerului, am făcut cunoştinţa cu
cu utilizarea mouse-ului şi utilizarea tastaturii, prelucrarea mesajelor de la acesta si am studiat bazele
şi principiile de functionare a functiilor GDI. Am invatat sa folosim resursele acestei biblioteci pentru
a desena diferite figuri utilizind primitivele GDI.
12