Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#]Hoe kan ik mijn control transparantie geven?

Pagina: 1
Acties:

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 29-11 23:30
Ik heb een control die ik overerf van een button. Deze button wil ik volledig zelf tekenen met GDI. Zo gezegd zo gedaan. Ik voeg een override van het onPaint event toe en ik teken mijn eigen control. Alleen nu wil ik afgeronde hoeken toevoegen aan mijn button. Ik teken nu netjes een blok met afgeronde hoeken. Maar nu blijft de achtergrond vreemd doen. Ik heb o.a. al de volgende dingen geprobeerd:

OnBackgroundPaint leeg.

TransparamtBackColor aanzetten:
C#:
1
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);


Zelf painten van een transparant blok:

C#:
1
2
Brush bg = new SolidBrush(Color.Transparent);
g.DrawRectangle(p, r);

Helaas werkt het allemaal niet. Is er iemand die mij een stapje verder kan helpen?

http://hawvie.deviantart.com/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Volgens mij kun je beter een region instellen met afgeronde hoeken. Hoe dat in .Net werkt weet ik echter niet, maar da's vast wel uit te vinden :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 30-11 19:45

TeeDee

CQB 241

- definieer 'vreemd' doen
- wat werkt allemaal niet?

Kan je niet 'rommelen' met Opacity? << .Net 3.0, my bad :D

Heart..pumps blood.Has nothing to do with emotion! Bored


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 29-11 23:30
.oisyn schreef op vrijdag 10 augustus 2007 @ 12:09:
Volgens mij kun je beter een region instellen met afgeronde hoeken. Hoe dat in .Net werkt weet ik echter niet, maar da's vast wel uit te vinden :)
Ik snap wat je bedoeld maar dat lost denk ik niet het probleem op. Het heeft denk ik meer te maken met hoe .NET met transparantie om gaat.
TeeDee schreef op vrijdag 10 augustus 2007 @ 12:11:
- definieer 'vreemd' doen
- wat werkt allemaal niet?

Kan je niet 'rommelen' met Opacity? << .Net 3.0, my bad :D
Een plaatje zegt meer dan duizend woorden.
Afbeeldingslocatie: http://www.microsign.nl/tmp/screenie.jpg

http://hawvie.deviantart.com/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

HawVer schreef op vrijdag 10 augustus 2007 @ 12:30:
[...]

Ik snap wat je bedoeld maar dat lost denk ik niet het probleem op. Het heeft denk ik meer te maken met hoe .NET met transparantie om gaat.
Als je regions gebruikt dan heb je juist geen transparantie nodig, omdat je control geclipped wordt adhv je region (en dus ook muiskliks e.d.). Het is iig de standaard win32 manier om windows te maken die niet rechthoekig zijn (dat kon al sinds win95, en toen bestond transparantie nog niet eens)

.edit: even gekeken in de MSDN, Regions (System.Drawing.Region) kun je ook gewoon instellen op controls middels de Region property.

.edit2: hmm, win32 kent de CreateRoundRectRgn(), maar in .Net kun je blijkbaar niet een roundrect region aanmaken. Je zou CreateRoundRectRgn() kunnen gebruiken en vervolgens Region.FromHRgn(), of je neemt de union van alle scanline regions van je button.

[ Voor 27% gewijzigd door .oisyn op 10-08-2007 12:43 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 29-11 23:30
Je hebt me al een eindje op weg geholpen. Het enige nadeel van je oplossing is dat je harde randen krijgt, dus geen AntiAliasing. Ik weet nog niet hoe ik dat kan oplossen.

C#:
1
2
3
GraphicsPath gradientPath = new GraphicsPath();
gradientPath = ExtendedGDI.GetRoundedRectanglePath(base.ClientRectangle, 20);
base.Region = new Region(gradientPath);

http://hawvie.deviantart.com/


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 29-11 23:30
:( Soms is de eenvoudige oplossing het moeilijkste van het probleem.
C#:
1
SetStyle(ControlStyles.Opaque, false);

Ja want als je je control transparant instelt moet je hem ook ook niet ondoorzichtelijk instellen.

[ Voor 27% gewijzigd door HawVer op 10-08-2007 14:35 ]

http://hawvie.deviantart.com/

Pagina: 1