31640
Goto Top

Sternformige, runde Fenster erstellen (mit C und C plus plus)

Ich habe borland C++ Builder 6 benutzt, mit Visual C++ habe ich keine Erfahrung

Um ein rundes Fenster zu erstellen:

8dbe3f94c710916d7f3bccea1de24cb8-1

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 face-smile
a2d9b71131aed7b12c7ed4169ea65a21-2

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
(
0b11a93d62fcf2a269275a99924f5d19-3
)
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=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:

b3bae83de3bc1713a651249973aa92fe-star

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

95a7d3bfded735bf16b682fbe8224d31-4

#define RGN_OR 2 was in mind. einem vorh. ist

8d65dc16ffbf4761178dc4e313c178a0-5

#define RGN_XOR 3
was in einem, aber nicht in anderen vorh. ist

707115ab554aa6e5ad2f4686beb8d3f3-6

#define RGN_DIFF 4 erster minus zweiter

5bc750e00d034115195c219961f3b85a-7

#define RGN_COPY 5
wies ich nicht face-sad
#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=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);
}

Content-ID: 36202

Url: https://administrator.de/tutorial/sternformige-runde-fenster-erstellen-mit-c-und-c-plus-plus-36202.html

Ausgedruckt am: 21.12.2024 um 15:12 Uhr

8644
8644 18.07.2006 um 09:49:03 Uhr
Goto Top
Moin,

man kann hier seine vorhandenen Tuto's auch editieren. Es ist nicht nötig, für jede Verbesserung ein neues zu schreiben.

Runde, Sternformige Fenster erstellen

Psycho
31640
31640 18.07.2006 um 09:51:16 Uhr
Goto Top
ja aber der Beitrag is tod!!!!!!!!!
thekingofqueens
thekingofqueens 18.07.2006 um 10:05:39 Uhr
Goto Top
Ist das dein Ernst mit GrÄnze?
8644
8644 18.07.2006 um 10:29:37 Uhr
Goto Top
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
31640
31640 18.07.2006 um 10:31:02 Uhr
Goto Top
Ist das dein Ernst mit GrÄnze?
uuuuuuuuuuuuuuuuuuuuuuuuuuuuups!
Danke das du mich aufmerksam gemacht hast!!!face-smile
31640
31640 18.07.2006 um 10:35:19 Uhr
Goto Top
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.
8644
8644 18.07.2006 um 10:39:26 Uhr
Goto Top
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
31640
31640 19.07.2006 um 10:42:37 Uhr
Goto Top
Psycho Dad
Nicht schlimm. Passiert mal... face-smile
Raphael
Raphael 19.07.2006 um 12:53:24 Uhr
Goto Top
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...
31640
31640 19.07.2006 um 18:17:29 Uhr
Goto Top
Ich fände es noch schön wenn da
steht, für welche sprache es genau ist
;)
ups. hab´s vergessen. face-sad (dachte Programmiersprachen->c und c++ ist eindeutig c oder c++)
jetzt besser? face-smile
Raphael
Raphael 19.07.2006 um 20:33:32 Uhr
Goto Top
jup face-smile
danke