Bitmaps mit WxWidgets in DialogBlocks erzeugen



  • Hallo Leute....

    Ich bin wirklich der unerfahrenste Noob in der Geschichte und ich hoffe ihr könnt mir da bisschen weiterhelfen.
    Man hat mich in ein Projekt reingeschmissen und ich muß hier von Null anfangen 🙂

    Ich soll eine Bitmap (einen Balken) in ein Fenster einzeichnen lassen, welche einen Farbverlauf hat und Flexibel ist (sollte das Fenster vergrößert werden). In das Fenster wird ein Schriftzug eingebaut.
    Das klappt alles wunderbar. jedoch möchte ich einen Farbverlauf von einer Farbe in eine andere und komme hier seit drei Tagen nicht weiter.
    Desweiteren sollte der Balken etwas kürzer werden (also die default-größe) und auch wesentlich niedriger. Also ungefähr so wie der oberste Farbverlauf in einem normalen Window.

    Hier der Quelltext bisher:

    #include "LcaaGUIStatBitmap.hpp"
    
    #define P_WIDTH   12
    #define  FACTOR  (unsigned char)2
    
    #define     __R  (unsigned char)40
    #define     __G  (unsigned char)150
    #define     __B  (unsigned char)0   
    
    namespace lcaa { namespace gui {
    
     LcaaGUIStatBitmap::LcaaGUIStatBitmap( wxWindow* parent, 
    				       wxWindowID id,
    				       const wxSize& size,
                           wxFont &font,
    				       const wxString& text,
                           wxPoint &txtPoint,
    				       long style,
    				       const wxString& name){
    
        int           i;
        unsigned char r,g,b;
        wxMemoryDC    mDC;
    
        r=__R;
        g=__G;
        b=__B;
        wxBitmap bmp(size.GetWidth(),size.GetHeight());
        mDC.SelectObject( bmp );
        wxColour col(r,g,b);
        wxPen pn(col,P_WIDTH);
        mDC.SetPen(pn);
    
        for( i=0; i<(size.GetWidth()+P_WIDTH); i +=P_WIDTH){
    
            if ( r < 255 && g < 255 && b < 255 ){
                r +=FACTOR;
                g +=FACTOR;
                b +=FACTOR;
            } 
            col.Set(r,g,b);
            pn.SetColour(col);
            mDC.SetPen(pn);
            mDC.DrawLine(i,0,i,size.GetHeight());
    
        }
    
        mDC.SetFont(font);
        mDC.SetTextForeground(*wxWHITE);
        mDC.DrawText(text,txtPoint.x,txtPoint.y);
        mDC.SelectObject( wxNullBitmap );
        Create( parent,id,bmp,wxDefaultPosition,size,style,name);	   
    
    }
    
    }} /* namespace lcaa, gui */
    

    edit: codetags bitte verwenden!


  • Mod

    Und was ist jetzt deine Frage?
    Soll es ein Bitmap sein?
    Oder mehr ein Fenster mit Farbverlauf im Hintergrund?
    Letzteres würde ich in dem Fall von wxPanel ableiten, und in der OnPaint den Farbverlauf zeichnen.



  • Naja, ich kriegs net hin, daß der Farbverlauf von einer Farbe in eine andere läuft.

    Also z. B. von grün nach braun.
    An sich soll das Prinzip schon so sein, daß es mit einer Schleife läuft und die größe flexibel bleiben soll. Denn wenn der User das Fenster vergrößert, soll der Balken auch länger werden.

    Meine Frage: Wie kann ich die Höhe des Balkens bestimmen?

    Ich setze einen Stift (wxPen) und ziehe einen verikalen Strich welcher sich durch die Schleife wiederholt und sich dabei in der Sättigkeit der Farbe verändert.
    Und diesen Strich möchte ich in der Länge bestimmen.


  • Mod

    Also die Höhe bzw. Breite müsstest du mit GetSize bekommen, gegebenenfalls noch für dich runterrechnen,
    so das der Farbverlauf nicht das ganze Fenster bedeckt z.B.

    Was den Farbverlauf angeht, solltest du dir Gedanken machen wie das genau aussehen soll,
    und wie breit jeweils ein einzelner Strich des Farbverlaufs sein soll.



  • Die breite des Striches definiere ich mit P_WIDTH. Das funkzt schon.

    Achja... Hab ja Deine Frage noch garnicht beantwortet. Der Balken mit dem Farbverlauf wird im Fenster eingebaut.

    Aber erstmnal ein riesen DANKESCHÖN für Deine Hilfe...


Anmelden zum Antworten