Die Schatten werde ich jetzt anders versuchen. Dazu werde ich die Regionen der schattierten Controls in einer großen Region sammeln (so dass man eine große Ebene mit "Flecken" hat, das ganze um ein paar Pixel verschieben und den Hintergrund einfärben.
Dann können die Controls auf die Schattenflächen gezeichnet werden, so dass nur rechts und unten etwas Schatten über steht.
=> Ich muss dann wohl doch nochmal nach einer Blur-Funktion schauen.
Ich hatte mal eine
Blur-Funktion gepostet.
1) Wenn ich für den Rahmen ein Polygon definiere und dieses Polygon dann auch mit CreatePolygonRgn benutze, um den Zeichenbereich zu begrenzen, dann werden die rechts und unten positionierten Rahmenlinien nicht mehr gezeichnet.
Daher habe ich das Polygon für die Region nach Rechts und unten um 1 Pixel vergrößert.
[...]
Für den Zweck ist das ja noch ok, aber kann man das irgendwie automatisieren?
Man könnte ja auch mal ein unregelmäßiges (z.B. sternförmiges mit schrägen und vielen Zacken) Polygon haben.
Auch das ginge. Du müsstest an jeder Ecke prüfen, ob der Vektor, in dessen Richtung sich der Schatten ausbreiten soll, ins Polygon reingeht oder aus dem Polygon rauskommt. Das kannst du leicht tun, indem schaust, ob das Skalarprodukt des Vektors mit den Normalen der beiden angrenzenden Kanten positiv oder negativ ist. Ich habe mal eine Skizze dazu gemacht. Positives Skalarprodukt ist in der Skizze blau, negatives Skalarprodukt ist rot. Somit ergeben sich für die Ecken drei verschiedene Fälle:
- Rot/Rot: Die Ecke bleibt wo sie ist.
- Blau/Blau: Die Ecke wird verschoben.
- Rot/Blau: Eine zusätzliche Kante wird eingefügt.
Wobei bei dieser Lösung zu beachten ist, dass die Richtung der Normalen davon abhängt, in welcher Richtung das Polygon gewickelt ist. Man muss also definieren, welche Richtung positiv ist.