Problem mit abgerundeten Fenstern
-
Hi Leute,
ich bin schon am verzweifeln und hoffe ihr könnt mir mit folgendem Problem helfen! Ich wollte ein Fenster basteln welches wie Trillian abgerundete Ecken hat. Dies habe ich mit folgendem Code auch geschafft, aber das Fenster sieht in 98/Me Systemen anders aus als in 2000/XP Sytemen. Bei 2000 Systemen fängt er immer zu früh an abzuschneiden und schneidet somit auch mein Hintergrundbild mit ab. Unter 98 sieht alles in Ordnung aus.
Hat jemand von euch eine Idee waran das leigen könnte?Danke für eure Mühen!
Anhang: (Quelltext -> abgerundetes fenster)
HRGN R, R1, R2, R3, R4;
TPoint P[4], P1[4], P2[4];P[0]=Point(11, 30);
P[1]=Point(297, 30);
P[2]=Point(288, 444);
P[3]=Point(16, 444);P1[0]=Point(12, 100);
P1[1]=Point(295, 100);
P1[2]=Point(292, 250);
P1[3]=Point(14, 250);P2[0]=Point(11, 26);
P2[1]=Point(297, 26);
P2[2]=Point(297, 439);
P2[3]=Point(11, 439);R=CreatePolygonRgn(P, 4, WINDING);
R3=CreatePolygonRgn(P1, 4, WINDING);
R4=CreatePolygonRgn(P2, 4, WINDING);// Elliptische Regionen erzeugen:
R1=CreateEllipticRgn(-8, 26, 316, 135);
R2=CreateEllipticRgn(7, 50, 301, 445);// Poligone und Ellipsen zusammenfuehren:
CombineRgn(R1, R, R1, RGN_AND);
CombineRgn(R2, R, R2, RGN_AND);
CombineRgn(R3, R1, R3, RGN_OR);
CombineRgn(R3, R3, R2, RGN_OR);
CombineRgn(R3, R3, R4, RGN_AND);
// Fensterform setzen:
SetWindowRgn(Handle, R3, FALSE);
-
probiers mal so:
HRGN R, R1, R2, R3, R4; TPoint P[4], P1[4], P2[4]; P[0]=Point(11, 30); P[1]=Point(297, 30); P[2]=Point(288, 444); P[3]=Point(16, 444); P1[0]=Point(12, 100); P1[1]=Point(295, 100); P1[2]=Point(292, 250); P1[3]=Point(14, 250); P2[0]=Point(11, 26); P2[1]=Point(297, 26); P2[2]=Point(297, 439); P2[3]=Point(11, 439); R=CreatePolygonRgn(P, 4, WINDING); R3=CreatePolygonRgn(P1, 4, WINDING); R4=CreatePolygonRgn(P2, 4, WINDING); // Elliptische Regionen erzeugen: R1=CreateEllipticRgn(-8, 26, 316, 135); R2=CreateEllipticRgn(7, 50, 301, 445); // Poligone und Ellipsen zusammenfuehren: CombineRgn(R1, R, R1, RGN_AND); CombineRgn(R2, R, R2, RGN_AND); CombineRgn(R3, R1, R3, RGN_OR); CombineRgn(R3, R3, R2, RGN_OR); CombineRgn(R3, R3, R4, RGN_AND); // Fensterform setzen: HDC hdc = GetDC(Form1->Handle); SetWindowRgn(Handle, R3, TRUE); ReleaseDC(Form1->Handle, hdc); DeleteObject(hdc); DeleteObject(R); DeleteObject(R1); DeleteObject(R2); DeleteObject(R3); DeleteObject(R4);
-
Leider nein, hat sich nichts geändert.
Sieht aber rein Speicher technisch schon besser aus *freu*.
Meine Vermutung ist aj das es irgendwelche Unterschiede geben muss in der API von 98 & 2000, die man in die Berechnung einfließen lassen muss. Aber ich find eben nix im web.
-
Verschoben nach "WinAPI".
-
Hab mir die Form, die du erreichen willst noch nicht so genau angeschaut, aber vielleicht hilft dir CreateRoundRectRgn
-
also das mit den abgerundeten fenstern war nur ein beispiel, sollte eigetnlich schon so ausehen wie das ding was ich da ewig konstruiert habe, wenn aber hier keiner mehr ideen hat, muss ich wohl auf das zurück greifen *flen*
-
Vielleicht hilft dir ja noch der RegionBuilder von WebFritzi - den findest du hier
-
Woran das liegt weiß ich nicht aber ich würde empfehlen wenn du die neusten headers hast ein SetLayeredWindowAttributes mit LWA_COLORKEY zu benutzen wenn das Programm auf einen 200/XP Rechner läuft
edit: Sind auch schneller
-
@flenders: Vielen Dank für die Werbung.