Problem bei EnableWindow mit Bitmap-Button



  • Hi,

    wenn ich mein Bitmap-Button mit EnableWindow(FALSE) unwirksam mache, dann wird der Button zwar unwirksam - so wie es auch sein soll - aber die Bitmap, wird ganz schön in Mittleidenschaft gezogen und verändert ihr Aussehen (man kann das Bild nur noch grob erkennen).

    Ideen, oder Tips?



  • Das ist normal, das das Bild dann anders angezeigt wird. Ist ohne Bild ja auch so.

    Idee!

    Anstatt den Button zu deaktivieren machst du

    m_cButton1.ShowWindow(FALSE);
    m_cButton2.ShowWindow(TRUE);
    

    Du weißt worauf ich hinaus will?
    Der zweite Button bekommt das Aussehen, welches du für den deaktivierten Button haben willst. Du hinterlegst dann einfach keine Aktion für den Button 2. Wenn Du Button 1 wieder "aktivierst", zeigste den hat wieder an und Button 2 verschwindet.
    Alle unklarheiten bereinigt?



  • ich würde einfach sagen: OwnerDraw



  • Hi,

    @Trikor Gute Idee, bloß ist es nicht gerade Benutzerfreundlich, wenn der User auf einen Button klickt und es passiert nichts (der kommt sich ganz schön verarscht vor 😉 ) Ne Alternative wäre ein Static mit einem Bild, doch distanziere ich mich von solchen unsauberen Methoden :p
    Nimm ein Ownerdraw

    Grüße Rapha



  • Mit BS_OWNERDRAW klappt es leider auch nicht.
    Zuvor hatte ich den Button nur mit BS_BITMAP erzeugt, wenn ich den Button jetzt mit BS_BITMAP | BS_OWNERDRAW erzeuge, dann wird mein Bitmap nicht mehr auf dem Button gesetzt...



  • Naja, du musst dann natürlich auch deine eigene Klasse von CButton ableiten und in ihr dass dann auch selbst malen 😉



  • Bei Codeproject und Codeguru findest du massenhaft Ownderdrawbuttons. Nimm einfach einen als Vorlage.



  • q150022 schrieb:

    Mit BS_OWNERDRAW klappt es leider auch nicht.
    Zuvor hatte ich den Button nur mit BS_BITMAP erzeugt, wenn ich den Button jetzt mit BS_BITMAP | BS_OWNERDRAW erzeuge, dann wird mein Bitmap nicht mehr auf dem Button gesetzt...

    Do not combine the BS_OWNERDRAW style with any other button styles.



  • Rapha schrieb:

    Bei Codeproject und Codeguru findest du massenhaft Ownderdrawbuttons. Nimm einfach einen als Vorlage.

    Hi Rapha,

    ich hab im Augenblick das gleiche Problem wie q150022. Allerdings finde ich dafür keine Vorlage bzw. ich weiß nicht, wie ich die einsetzen soll.
    Habe mir http://www.codeproject.com/buttonctrl/cbuttonst.asp?target=Button als ButtonStyle ausgesucht. Die Klasse ist wirklich klasse. 😃
    Allerdings wenn ich den BitmapButton deaktiviere, habe ich nur noch einen braunen Fleck. Das meine Art (wie oben beschrieben) Benutzerunfreundllich ist, ist durchaus richtig. War auch nur so ne erste Idee.
    Hab schon dran gedacht, Button ausblenden, Image einblenden (kann nicht gedrückt werden), ist aber meiner Meinung nach auch nicht die feinste Lösung.
    Ne Idee???



  • Hi

    Ein Ownderdraw-Button, zeichnet sich, wie der Name aussagt, komplett selbst
    =>Du musst bei einem Ownerdraw Button selbst Code zum "malen" des Buttons schreiben.
    Nachteil: Man muss sich erst einmal in das Thema einarbeiten
    Vorteil: Du kannst den Button komplett an deine eigene Vorstellungen anpassen.

    Am Besten ist es also sich erst einmal eine kurze Einführung zum Thema "Subclassen" durchzulesen (=>google).

    Ich hoffe ich konnte euch ne gute Starthilfe, wonach ihr suchen müsst, geben.

    Grüße Rapha



  • Hi q150022,

    ich hab bei CodeProject eine Buttonklasse gefunden, in der man eine zweite Bitmap für Button down und eine dritte Bitmap für Button disabled angeben kann.

    void CImageBitmap::GetBitmaps(UINT &up, 
                                  UINT &down, 
                                  UINT &disabled)
    

    http://www.codeproject.com/buttonctrl/betterbmpbutton.asp

    Der Button hat allerdings einen kleinen Rand. Ich hab nicht gefunden, wie oder ob man das abstellen kann.
    Ich für meinen Teil nutze jetzt die Buttonkomponente von Davide Calabro
    http://www.codeproject.com/buttonctrl/cbuttonst.asp
    Da ist ein Bitmap-Button, wo man Text drüber legen kann.
    Beim Deaktivieren des Buttons mach ich gleichzeitig ein ShowWindow(FALSE) und blende ein Image in Form eines deaktivierten Buttons ein. Ist nicht die beste Lösung, sieht aber klasse aus. 😉

    Ach ja, die Buttonkomponente von Davide Calabro ist wohl die Beste, die ich bisher gesehen habe. 😮



  • Hi,

    wenn ich mein Bitmap-Button mit EnableWindow(FALSE) unwirksam mache, dann wird der Button zwar unwirksam - so wie es auch sein soll - aber die Bitmap, wird ganz schön in Mittleidenschaft gezogen und verändert ihr Aussehen (man kann das Bild nur noch grob erkennen).

    Ideen, oder Tips?

    Ich würde empfehlen, stattdessen ein Symbol / Icon zu benutzen und das transparent zu machen. Dann sieht der Disabled Status recht anständig aus.


Anmelden zum Antworten