Sternformige, runde Fenster erstellen (mit C und C plus plus)
18.07.2006
09:26:20 Uhr12425 Aufrufe
11 Antworten
09:26:20 Uhr
11 Antworten
Noch nicht bewertet
(Ich habe borland C++ Builder 6 benutzt, mit Visual C++ habe ich keine Erfahrung)
Um ein rundes Fenster zu erstellen
(http://www.administrator.de/images/articl ...
braucht man nur folgendes:
HRGN R;
R=CreateEllipticRgn(0,0,200,200);
SetWindowRgn(Handle, R, TRUE);
die Parameter von CreateEllipticRgn(0,0,200,200);
heissen:
CreateEllipticRgn(*linke Grenze*,
*obere Grenze*,
*rechte Grenze*,
*untere Grenze*);
Um ein rechteckigen Fenster zu erstellen
(http://www.administrator.de/images/articl ...
nutzt man
R=CreateRectRgn(100,0,200,200); Parameter wie oben
Rechteckiges Fenster mit gerundeten Ecken:
R=CreateRoundRectRgn(0,0,200,200,20,50);
die Parameter hab ich am Bild erklärt
(http:www.administrator.de/images/articles/0b11a93d62fcf2a269275a99924f5d19-3.JPG)
R=CreateRoundRectRgn(L,T,R,D,A,B);
Um ein Polygones Fenster zu erstellen nimmt man
R=CreatePolygonRgn(P,5,WINDING);
z.B. so:
#include <math.h>
int fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0; return R*sin(W*a);
}
int fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0; return R*cos(W*a);
}
HRGN fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}
void fastcall TForm1::FormCreate(TObject *Sender)
{
int X=Width/2, Y=Height/2;
HRGN R1, R2, R;
R=GetStarReg(X, Y, 100);
SetWindowRgn(Handle, R, TRUE);
}
es entsteht so was:
(http://www.administrator.de/images/articl ...
um 2 HRGN´s mit einander zu kombinieren benutzt man die Funktion:
CombineRgn(R, R, R1, RGN_OR);
Parameter:
1ster zeigt wohin das Ergebnis der Kombinierung kommt
2ter & 3ter HRGN´s die kombiniert werden müssen
4ter wie die beide kombiniert werden
#define RGN_AND 1 was in beiden vorhanden ist
(http:www.administrator.de/images/articles/95a7d3bfded735bf16b682fbe8224d31-4.JPG)
#define RGN_OR 2 was in mind. einem vorh. ist
(http:www.administrator.de/images/articles/8d65dc16ffbf4761178dc4e313c178a0-5.JPG)
#define RGN_XOR 3 was in einem, aber nicht in anderen vorh. ist
(http:www.administrator.de/images/articles/707115ab554aa6e5ad2f4686beb8d3f3-6.JPG)
#define RGN_DIFF 4 erster minus zweiter
(http:www.administrator.de/images/articles/5bc750e00d034115195c219961f3b85a-7.JPG)
#define RGN_COPY 5 wies ich nicht
#define RGN_MIN RGN_AND
#define RGN_MAX RGN_COPY
Viel Spaß mit bescheuerten Fenstern:
#include <math.h>
int fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0; return R*sin(W*a);
}
int fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0; return R*cos(W*a);
}
HRGN fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}
void fastcall TForm1::FormCreate(TObject *Sender)
{
Width = 400;
Height = 400;
int X=Width/2, Y=Height/2;
HRGN R1, R2, R;
R=GetStarReg(X, Y, 100);
for(int i=1;i<10;i+=2)
{
R1=GetStarReg(X-Sin(i, 120), Y-Cos(i, 110), 40);
CombineRgn(R, R, R1, RGN_OR);
}
R1=GetStarReg(X, Y, 30);
CombineRgn(R, R, R1, RGN_DIFF);
R1=CreateEllipticRgn(3, 3, Width-6, Height-6);
R2=CreateEllipticRgn(20, 10, Width-20, Height-10);
CombineRgn(R1, R1,R2, RGN_DIFF);
CombineRgn(R, R, R1, RGN_OR);
SetWindowRgn(Handle, R, TRUE);
}
Programm-beispiel [http:www.administrator.de/images/articles/d67cf78dd82143f4a2c209c15412728b-Project1.zip hier]
Um ein rundes Fenster zu erstellen
(http://www.administrator.de/images/articl ...
braucht man nur folgendes:
HRGN R;
R=CreateEllipticRgn(0,0,200,200);
SetWindowRgn(Handle, R, TRUE);
die Parameter von CreateEllipticRgn(0,0,200,200);
heissen:
CreateEllipticRgn(*linke Grenze*,
*obere Grenze*,
*rechte Grenze*,
*untere Grenze*);
Um ein rechteckigen Fenster zu erstellen
(http://www.administrator.de/images/articl ...
nutzt man
R=CreateRectRgn(100,0,200,200); Parameter wie oben
Rechteckiges Fenster mit gerundeten Ecken:
R=CreateRoundRectRgn(0,0,200,200,20,50);
die Parameter hab ich am Bild erklärt
(http:www.administrator.de/images/articles/0b11a93d62fcf2a269275a99924f5d19-3.JPG)
R=CreateRoundRectRgn(L,T,R,D,A,B);
Um ein Polygones Fenster zu erstellen nimmt man
R=CreatePolygonRgn(P,5,WINDING);
z.B. so:
#include <math.h>
int fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0; return R*sin(W*a);
}
int fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0; return R*cos(W*a);
}
HRGN fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}
void fastcall TForm1::FormCreate(TObject *Sender)
{
int X=Width/2, Y=Height/2;
HRGN R1, R2, R;
R=GetStarReg(X, Y, 100);
SetWindowRgn(Handle, R, TRUE);
}
es entsteht so was:
(http://www.administrator.de/images/articl ...
um 2 HRGN´s mit einander zu kombinieren benutzt man die Funktion:
CombineRgn(R, R, R1, RGN_OR);
Parameter:
1ster zeigt wohin das Ergebnis der Kombinierung kommt
2ter & 3ter HRGN´s die kombiniert werden müssen
4ter wie die beide kombiniert werden
#define RGN_AND 1 was in beiden vorhanden ist
(http:www.administrator.de/images/articles/95a7d3bfded735bf16b682fbe8224d31-4.JPG)
#define RGN_OR 2 was in mind. einem vorh. ist
(http:www.administrator.de/images/articles/8d65dc16ffbf4761178dc4e313c178a0-5.JPG)
#define RGN_XOR 3 was in einem, aber nicht in anderen vorh. ist
(http:www.administrator.de/images/articles/707115ab554aa6e5ad2f4686beb8d3f3-6.JPG)
#define RGN_DIFF 4 erster minus zweiter
(http:www.administrator.de/images/articles/5bc750e00d034115195c219961f3b85a-7.JPG)
#define RGN_COPY 5 wies ich nicht
#define RGN_MIN RGN_AND
#define RGN_MAX RGN_COPY
Viel Spaß mit bescheuerten Fenstern:
#include <math.h>
int fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0; return R*sin(W*a);
}
int fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0; return R*cos(W*a);
}
HRGN fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}
void fastcall TForm1::FormCreate(TObject *Sender)
{
Width = 400;
Height = 400;
int X=Width/2, Y=Height/2;
HRGN R1, R2, R;
R=GetStarReg(X, Y, 100);
for(int i=1;i<10;i+=2)
{
R1=GetStarReg(X-Sin(i, 120), Y-Cos(i, 110), 40);
CombineRgn(R, R, R1, RGN_OR);
}
R1=GetStarReg(X, Y, 30);
CombineRgn(R, R, R1, RGN_DIFF);
R1=CreateEllipticRgn(3, 3, Width-6, Height-6);
R2=CreateEllipticRgn(20, 10, Width-20, Height-10);
CombineRgn(R1, R1,R2, RGN_DIFF);
CombineRgn(R, R, R1, RGN_OR);
SetWindowRgn(Handle, R, TRUE);
}
Programm-beispiel [http:www.administrator.de/images/articles/d67cf78dd82143f4a2c209c15412728b-Project1.zip hier]
Psycho Dad schreibt am 18.07.2006 um 09:49:03 Uhr
Moin,
man kann hier seine vorhandenen Tuto's auch editieren. Es ist nicht nötig, für jede Verbesserung ein neues zu schreiben.
Guckst du hier
Psycho
man kann hier seine vorhandenen Tuto's auch editieren. Es ist nicht nötig, für jede Verbesserung ein neues zu schreiben.
Guckst du hier
Psycho
Psycho Dad schreibt am 18.07.2006 um 10:29:37 Uhr
Ein Beitrag - speziell, wenn es sich um ein Tutorial handelt ist nicht gleich tod, wenn du nicht täglich 3 Kommentare bekommst! Gerade bei diesem Thema! Nicht jeder muß täglich mehrere andersförmige Fenster basteln!
Psycho
Psycho
Ein Beitrag - speziell, wenn es sich um ein
Tutorial handelt ist nicht gleich tod, wenn
du nicht täglich 3 Kommentare bekommst!
Gerade bei diesem Thema! Nicht jeder
muß täglich mehrere
andersförmige Fenster basteln!
Psycho
Beitrag ist tod weil die Frage ich schon beantwortet habe, also belestige ich andere nicht mit sinnlosen Fragen. Und jetzt hab ich genug Wissen darüber um ein Tutorial zu erstellen. Also weg mit Beitrag her mit Tutorial.Tutorial handelt ist nicht gleich tod, wenn
du nicht täglich 3 Kommentare bekommst!
Gerade bei diesem Thema! Nicht jeder
muß täglich mehrere
andersförmige Fenster basteln!
Psycho
Psycho Dad schreibt am 18.07.2006 um 10:39:26 Uhr
OK,
war mein Fehler! Ich habe deinen ersten Beitrag zu diesem Thema schon als Tutorial gelesen - frag mich nicht warum! SORRY!!!
Wahrscheinlich weil er so anfängt: Um zu erstellen, muß man...
Noch mal SORRY!!!
Psycho
war mein Fehler! Ich habe deinen ersten Beitrag zu diesem Thema schon als Tutorial gelesen - frag mich nicht warum! SORRY!!!
Wahrscheinlich weil er so anfängt: Um zu erstellen, muß man...
Noch mal SORRY!!!
Psycho
Raphael schreibt am 19.07.2006 um 12:53:24 Uhr
Ich fände es noch schön wenn da steht, für welche sprache es genau ist ;)
So auf den ersten Blick c# oder c++.NET ...
Wenn ich ein Tutorial für unförmige Fenster suche, dann meist für eine bestimmte Sprache ...
Zwar ist das bei .NET nicht so ein Problem da alles recht ähnlich ist und ziemlich schnell von der einen Sprache in die andere "übersetzt" ist... aber es gibt auch Leute die .NET nicht mögen oder nicht können ;) Es gibt ja schliesslich auch andere Programmiersprachen die Windows-APIs unterstützen...
So auf den ersten Blick c# oder c++.NET ...
Wenn ich ein Tutorial für unförmige Fenster suche, dann meist für eine bestimmte Sprache ...
Zwar ist das bei .NET nicht so ein Problem da alles recht ähnlich ist und ziemlich schnell von der einen Sprache in die andere "übersetzt" ist... aber es gibt auch Leute die .NET nicht mögen oder nicht können ;) Es gibt ja schliesslich auch andere Programmiersprachen die Windows-APIs unterstützen...







31640schreibt am 18.07.2006 um 09:51:16 Uhr31640schreibt am 18.07.2006 um 10:35:19 Uhr31640schreibt am 18.07.2006 um 10:31:02 Uhr31640schreibt am 19.07.2006 um 10:42:37 Uhr31640schreibt am 19.07.2006 um 18:17:29 Uhr