Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Imprimanta ciss rezista perioade ...

Garmin fēnix 7 / PRO / Saphi...

Care sunt cele mai mari regrete a...

Alfa Romeo Stelvio 2.2 jtd
 Intrebari srl nou

La multi ani @AndReW99!

Alegere masina £15000 uk

TVR vrea sa lanseze o platforma d...
 Strategie investie pe termen lung...

Modulator FM ptr auto alimentat p...

orange cablu f.o. - internet fara...

Robinet care comuta traseul
 A fost lansata Fedora 40

Samsung S24 plus

Imi iau un Dell? (Vostro vs others)

Abonati Qobuz?
 

Deseneaza usor din C++ sub Windows

- - - - -
  • Please log in to reply
1 reply to this topic

#1
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
Multi se intreaba cum pot desena ceva sub Windows, insa mult pomenitul "graphics.h" a lui Borland era pentru MS-DOS si nu-si are locul in 2015.
WinAPI pe de alta parte, ii descurajeaza pe multi prin codul necesar initializarii.

Drept urmare, am creat un mic header ce ascunde partea "complicata" din spate, si permite dezvoltatorului sa se concentreze strict pe partea de desenare.

Tot ce trebuie dezvoltatorul sa faca e sa:
  • Creeze un proiect C++ folosind Visual C++ (daca foloseste gcc, trebuie sa dea link manual la gdiplus.lib)
  • Includa header-ul in proiect
  • Defineasca o functie avand semnatura void Draw(Graphics& graphics)
  • Sa apeleze functia Start, transmitand drept parametrii dimensiunea dorita a ferestrei alaturi de un pointer la functia definita mai sus.

Ce va face codul din header?
  • Initializeaza o ferestra de dimensiunea ceruta si o mentine afisata pe toata durata aplicatiei
  • La fiecare redesenare ceruta, creaza un context al GDI+ si il transmite functiei definite de dezvoltator.

Folosind GDI+, utilizatorul benefieaza o biblioteca orientata pe obiect ce abstractizeaza API-ul de desenare GDI si adauga si facilitati noi.

De exemplu, desenarea unor figuri geometrice, in diverse culori, scrierea textului, sau chiar afisarea unor poze de pe disc, se realizeaza foarte usor:

#include "Ready2Draw.h"

void Draw(Graphics& graphics)
{
	Pen redPen(Color(200, 0, 0));
	Pen bluePen(Color(0, 0, 200));
	LinearGradientBrush gradientBrush(Point(0, 0), Point(200, 0), Color(200, 0, 0), Color(0, 200, 0));
	LinearGradientBrush gradientBrush2(Point(0, 0), Point(800, 50), Color(200, 0, 0), Color(200, 200, 0));
	Font comicFont(L"Comic Sans MS", 30);

	graphics.DrawLine(&redPen, 50, 25, 100, 100);
	graphics.DrawRectangle(&bluePen, 200, 25, 50, 150);
	graphics.FillRectangle(&gradientBrush, 400, 25, 200, 150);
	graphics.DrawEllipse(&bluePen, 650, 25, 100, 150);

	graphics.DrawString(L"Scris pe imagine. Suportă și diacritice!", -1, &comicFont, PointF(25, 180),
		&gradientBrush2);

	Image image(L"Untitled.png");
	graphics.DrawImage(&image, 50, 250, image.GetWidth(), image.GetHeight());
}

int main()
{
	return Start(800, 600, Draw);
}


Rezultatul:
Attached File  exemplu.png   35.88K   236 downloads

Acest header are rol didactic si nu este optim pentru productie. Odata ce dezvoltatul prinde curaj, poate implementa el continutul header-ului, adaptat nevoilor.

Mai multe despre GDI+: https://msdn.microso...2(v=vs.85).aspx

Attached Files


Edited by dani.user, 13 April 2015 - 13:53.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
Exemplu compilare folosing gcc:

Quote

g++ -DUNICODE Exemplu.cpp -lgdiplus -o Exemplu.exe

Edited by dani.user, 13 April 2015 - 14:05.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate