Lucrul cu opengl - introducere, delphisite

procedura TForm2. Button1Click # 40; Expeditor: TObject # 41; ;

H: = FindWindow # 40; 'TForm1'. 'Form1' # 41; ;

dacă H <> 0 atunci

ShowMessage # 40; - Există Form1! # 41;







ShowMessage # 40; - Fără Form1! # 41;

procedura TForm2. FormMouseMove # 40; Expeditor: TObject;

Schimbare: TShiftState; X, Y: Integer # 41; ;

Titlu: = 'x =' + IntToStr # 40; X # 41; + ', y =' + IntToStr # 40; Y # 41; ;

Titlul formularului afișează coordonatele indicatorului mouse-ului.
Executați două exemple ale programului și rețineți că o fereastră care nu are focalizare ("inactivă"), de asemenea, răspunde la mișcarea cursorului peste suprafața sa.
Având o legătură cu fereastra, aplicația poate efectua orice acțiune cu aceasta, trimițând mesaje.
Să modificăm codul de procesare a clicurilor:

procedura TForm2. Button1Click # 40; Expeditor: TObject # 41; ;

H: = FindWindow # 40; 'TForm1'. 'Form1' # 41; ;

dacă H <> 0 atunci

SendMessage # 40; H, WM_CLOSE, 0. 0 # 41; ;

Dacă există o fereastră de clasă "TForm1" cu titlul "Form1", aplicația noastră îi trimite un mesaj WM_CLOSE - încearcă să închidă fereastra.
În mod similar, dacă trebuie să desenați ceva pe suprafața ferestrei altcuiva, trebuie să obțineți o legătură cu această fereastră.
În primul rând, să încercăm să tragem de pe suprafața ferestrei native.
Plasați un alt buton, faceți clic pe procesarea care vă aduce în minte:

procedura TForm2. Button2Click # 40; Expeditor: TObject # 41; ;

dc: = GetDC # 40; mâner # 41; ;







dreptunghi # 40; dc, 10. 10. 110. 110 # 41; ;

ReleaseDC # 40; Mâna, dc # 41; ;

Lansați aplicația. Când faceți clic pe butonul adăugat, este desenat un pătrat pe suprafața ferestrei. Pentru desen, folosim funcții de nivel inferior ale Windows.
Să încercăm să tragem pe suprafața ferestrei altcuiva, pentru care schimbăm codul scris doar:

procedura TForm2. Button2Click # 40; Expeditor: TObject # 41; ;

Fereastră: = FindWindow # 40; 'TForm1'. 'Form1' # 41; ;

dacă fereastră <> 0 atunci

dc: = GetDC # 40; fereastră # 41; ;

dreptunghi # 40; dc, 10. 10. 110. 110 # 41; ;

ReleaseDC # 40; Mâna, dc # 41; ;


Și procedura de tratare a evenimentului pentru evenimentul OnCreate din formular începe cu următoarele rânduri:

DC: = GetDC # 40; mâner # 41; ;

hrc: = wglCreateContext # 40; DC # 41; ;

wglMakeCurrent # 40; DC, hrc # 41; ;

Asta este, vom obține o redare context pentru Windows, setați formatul de pixeli dorit, crearea contextului de redare OpenGL și face curent care a cauzat funcții OpenGL pentru a lucra cu această fereastră.
În ceea ce privește formatul pixelilor, vom vorbi în detaliu mai târziu, iar acum aș dori să atrag atenția asupra a două puncte.
În primul rând, obținem valoarea tipului HDC atunci când creați o fereastră, în procesatorul de evenimente OnCreate sau, cu alte cuvinte, în manualul de mesaje WM_CREATE. Acest lucru este comun și tradițional pentru programele Windows.
Unii programatori au făcut să remarce că obținerea joacă context în crearea unei ferestre este oarecum incorectă pentru Windows 9X și mai corect ar fi să se obțină într-un context de o tratare a evenimentului sau OnShow OnPaint. Poate că acesta este cazul și, în anumite situații, poate afecta corectitudinea aplicației. Ar trebui să luați în considerare acest lucru atunci când scrieți aplicații critice.
În al doilea rând, contextul de redare Windows și contextul de redare OpenGL sunt de obicei lansate de aplicație. Asta este, comenzile de ieșire OpenGL sunt de obicei încadrate de următoarele rânduri:

dc: = BeginPaint # 40; Fereastră, ps # 41; ;
wglMakeCurrent # 40; DC, hrc # 41; ;
wglMakeCurrent # 40; 0. 0 # 41; ;
EndPaint # 40; Fereastră, ps # 41; ;
ReleaseDC # 40; Fereastră, dc # 41; ;







Articole similare

Trimiteți-le prietenilor: