Buttons mit schoenem Design



  • Hallo,

    ich suche eine Methode wie man schoene (z.B. mit Schatten, 3D, reflektierte) Buttons selber zeichnen kann. Buttons an sich kann ich selber erstellen, aber die sehen dann eher billig aus (ohne Farbuebergang, kein 3D etc.). Kennt jemand da eine gute Methode wie man sowas hinkriegen kann? Oder muss man wirklich fuer sowas ein kreatives und kuenstlerisches Talent sein?

    Auf Hilfen bin ich Euch dankbar.

    LG

    Micha



  • Den "normalen" 3D-Button (grau mit passenden Rahmen) kann MFC eigentlich selber darstellen - du mußt nur beim Anlegen des Projektes sagen, daß du 3D-Dialoge verwenden willst. Wenn du es exotischer haben willst, benötigst du einen User-Drawn Button, den du manuell bemalen mußt (Bitmap laden und in der DrwaItem() auf den Bildschirm zeichnen).



  • Danke erstmals fuer die schnelle Antwort.

    Ja den normalen 3D-Button kenne ich. Aber ich moechte eher wie Du schon sagtest etwas exotischeres erstellen :).

    Wie bekomme ich denn so einen User-drawn button ?

    Wie genau meinst du das mit bitmap laden und dann darauf zeichnen? Ich moechte ja eben nicht ein bitmap laden sondern alles in der DrawItem() selber zeichnen.



  • mike2003 schrieb:

    Wie bekomme ich denn so einen User-drawn button ?

    Entweder du setzt im Ressourcen-Editor ein Häkchen vor "Besitzerzeichnung" bei den Button-Eigenschaften oder du übergibst den Stil BS_OWNERDRAW an die Create()-Methode.

    Wie genau meinst du das mit bitmap laden und dann darauf zeichnen? Ich moechte ja eben nicht ein bitmap laden sondern alles in der DrawItem() selber zeichnen.

    Klar kannst du auch alles selber zeichnen - die DrawItem()-Methode bekommt u.a. einen HDC, in den sie zeichnen kann. Aber am einfachsten ist es imho, wenn du das Button-Design schon vorher malst und nur noch per BitBlt() dort rein"werfen" mußt.



  • Ok so muesste ich dann aber das Bitmap als resource laden das jedoch bei vielen Bitmaps auf die Speicherkapazitaet der .exe geht.

    Also ist das wirklich nur die einzige Moeglichkeit ein bitmap vorher zu erstellen und es dann in den kontext reinzuladen?

    Oder muss man sonst ein kreatives Haendchen besitzen um mit SetPixel jedes einzelne pixelchen zu malen?



  • Nein, es ist nicht die einzige Möglichkeit, aber die einfachste. Du kannst auch Den Button "on the fly" mit LineTo(), Arc(), SetPixel() etc. zusammenpinseln (schau dir mal die Doku der Klasse CDC an). Das hat schon nichts mehr mit "kreativem Händchen" zu tun - das ist pure Fleiß-Arbeit (und ob der Packen SetPixel()-Aufrufe weniger Platz in der EXE benötigt als das Button-Bitmap, wage ich zu bezweifeln).



  • Ja ich kenne die CDC Klasse die ist sehr massiv bestueckt.

    Ja genau das ist das was ich meine wenn ich das ganze on the fly mache dann
    kriege ich das niemals so hin wie man das z.B. an den Buttons des neuen IE sieht.

    Deswegen wollte ich wissen ob es da eine moeglichkeit gibt so einen schoenen designten Button zu erstellen. Aber so wie ich das sehe muss man da zu viel selber schreiben und man weis auch nicht ob das am Ende zu einem guten Ergebnis fuehrt. Daher finde ich deine Methode mit dem Bitmap kopieren einfacher. Man muss halt nur eine menge bitmaps laden um sie in den kontext zu kopieren auch gut.



  • Schon mal unter http://www.codeproject.com/ unter MFC Controls gestöbert?

    Gruss, Gio



  • Ja habe ich schon und genau da habe ich mehrfach entnehmen koennen das die das alles pixel fuer pixel machen ueberwiegend mit setpixel.



  • Das mag schon sein, nur ich habe hier schon den Code des ein oder anderen Controls als Basis genommen und dann mein eigenes angepasst. Bisher bin ich immer gut damit gefahren ;).

    Gruss, Gio


Anmelden zum Antworten