Childewindow transparent machen (ein oder ausblenden geht auch)



  • Das Problem hierbei ist ANSI C...
    Klassen in ANSI C gibt es nicht, also ist leider auch diese Variante gestorben.

    Schade! Ich hatte gehofft es würde damit gehen.

    Dort ist aber von "regions" die Rede, was genau ist das, das hört man öffter im vergleich mit "transparenz" kann das sein?
    Ist das eventuell meine lösung?

    Danke für diene Gedult und deine Antworten!



  • Der Typ beschreibt in seinem CodeProject Artikel doch wie man es machen kann. Wo ist das Problem? Schreib den Code halt ab/um, wenn du ihn in C willst. Das Prinzip und die Api Funktionen sind gleich, egal ob C++ oder C.



  • Die API Funktionen ja, nur kann ich C++ nicht so gut, kann das also eher schlecht umschreiben.

    Import the bitmaps into your project as a new resource type, "RAW". The bitmaps can now be loaded as resources for use on the buttons.

    Wie soll ich dass machen?

    Ich bin noch nich solange bei C und wie gesagt C++ ist fast nich forhanden, jedenfalls nich tausserhalb der CMD.

    Sonst hätte ich damit ja kein problem 😃



  • Öhm, sorry, aber in dem Artikel seh ich kaum was C++ spezifisches 😕



  • class CHoverButtonEx : public CBitmapButton
    
    class CMemDC : public CDC {
    
    class	winDIB
    

    Klassen gibt es in C nicht;

    CHoverButtonEx::CHoverButtonEx()
    

    Funktion einer Klasse, richtig?

    void CHoverButtonEx::SetToolTipText(CString spText, BOOL bActivate)
    

    der ist sogar zweimal, lediglich mit anderen parametern vorhanen, geht in C auchnich...

    m_Btn1.SetHorizontal(TRUE);
    m_Btn1.SetRegion(r);
    m_Btn1.LoadRaw(IDR_RED, 192, 48);
    m_Btn1.SetToolTipText("Press Me!");
    

    Dass sollte reichen um dir zu verstehen zugeben, das ich darunter C++ verstehe, kann auch daran liegen das ich wie gesagt C++ nicht kenne, und jetzt nur denke das die meisten sachen halt C++ sind.

    Was z.B. "m_Btn1" ist, ist nirgends aufgeschrieben, das ist für CodeProject echt arm find ich.
    Auch zu "_bmi[0]" habe ich nichts gefunden *verwirrt*

    Vllt kannst du mir ja erklären, wo ich was falsch interpretiere, aber ich sehe die wichtigsten Teile einfach als C++ Code.. 😞
    Is ja nich so dass ich zu dem Thema nichts finden will 😃



  • @lippoliv: Stimmt zwar, Klassen und Überladung gibt es im ANSI-C Standard nicht, aber Strukturen gibt es dort, die auch Memberfunktionen enthalten dürfen (IMHO), Beispiel:

    struct SDemo
    {
       void DoSomething(void);
    }
    
    // ...
    
    void SDemo::DoSomething(void)
    {
       printf("lari-fari!");
    }
    

    Allerdings ist schon einiges an C++ drin, wenn auch sehr elementar. Bedarf schon etwas Einarbeitung.



  • CodeFinder schrieb:

    @lippoliv: Stimmt zwar, Klassen und Überladung gibt es im ANSI-C Standard nicht, aber Strukturen gibt es dort, die auch Memberfunktionen enthalten dürfen (IMHO), Beispiel:

    struct SDemo
    {
       void DoSomething(void);
    }
    
    // ...
    
    void SDemo::DoSomething(void)
    {
       printf("lari-fari!");
    }
    

    seit wann dürfen c structs memberfunktionen enthalten, in deinem selbstzusammengefrickelten compiler vielleicht, aber sonst eher ned háháhá 🕶



  • Ich glaube auch das das Schwachfug ist, denn in C habe ich noch nie ein Strukt mit ner Funktion gesehen;

    hier der beweis:

    test.c:5: error: field `getAge' declared as a function
    test.c:10: error: two or more data types in declaration of `main'
    test.c: In function `main':
    test.c:14: error: incompatible types in assignment
    test.c:14: error: syntax error before ':' token
    test.c: At top level:
    test.c:17: error: syntax error before ':' token
    
    #include <stdio.h>
    
    struct myFunk
    {
    	int getAge();
    	int age;
    }
    
    int main()
    {
    	int i;
    	struct myFunk hans;
    
    	i = hans::getAge();
    }
    
    int myFunk::getAge()
    {
    	return age;
    }
    

    Könnte man das über Pointer lösen?



  • Ist ja auch egal, ich versuche es trotzdem mit dem Code von CodeProject, es ist aber schon nicht einfach...

    Also ich sitze gerade an:

    static inline unsigned int alphaBlend(const unsigned 
                          int bg, const unsigned int src)
    {
        unsigned int    a = src >> 24;    // sourceColor alpha
    
        // If source pixel is transparent, just return the background
    
        if (0 == a) return bg;
    
        // alpha-blend the src and bg colors
    
        unsigned int rb = (((src & 0x00ff00ff) * a) + 
              ((bg & 0x00ff00ff) * (0xff - a))) & 0xff00ff00;
        unsigned int    g  = (((src & 0x0000ff00) * a) + 
              ((bg & 0x0000ff00) * (0xff - a))) & 0x00ff0000;
    
        return (src & 0xff000000) | ((rb | g) >> 8);
    }
    

    jetzt nicht lachen, aber was genau macht z.B. "src & 0x00ff00ff" ?
    und dann noch was macht " a = src >> 24" wird da quasi gesagt "a ist gliech letzt 3 stellen von src"?



  • hallo,
    nein solche fragen sind schon legitim, das ist am anfang auch nicht ganz so leicht zu verstehen.

    a = src >> 24 bedeutet einfach daß src um 24 stellen nach rechts geshifted wird und a dann die obersten 8 bits von src beinhaltet. auf diese weise kannst du zb 4 bytes in einem 32bit word unterbringen.

    durch das src & 0x00FF00FF kannst du bestimmte bits löschen, also auf 0 setzen. um dir das besser klar zu machen kannst du die hexzahl mal im windoof taschenrechner in binär anzeigen lassen, dann kannst du dir ungefär ausdenken, was so eine operation macht. in deinem fall da oben wird es benutzt um die alpha und die grün komponente aus dem 32bit rgba wort zu löschen.

    suche mal nach bitshifts und binäre operanden, etc wenn du das besser checken willst.



  • Also ich bekomme src rein und spiehcere in a lediglich die letzten 8 bit.
    dann setze ich das ?erste? byte von src auf 1, das ?zweite? auf 0 das ?dritte? auf 1 und das ?vierte? auf 0 bei: (src & 0x00ff00ff)???

    Uiui.. ja ich werde mir darüber wohl etwas anlesen, aber danke für die Info.

    Ist dieser BLock: "((src & 0x00ff00ff) * a)" der Teil "sourceColor × sourceAlpha / 255 " nur halt "(255 / sourceColor) × sourceAlpha" sorum?

    Also dann währe ja "(((src & 0x00ff00ff) * a) + ((bg & 0x00ff00ff) * (0xff - a))) & 0xff00ff00" die gesammte formel ne(sourceColor × sourceAlpha / 255 + backgroundColor × (255 – sourceAlpha) / 255)?

    [edit] hier hab ich mal versucht eine bitmap transparent darzustellen, wie gesagt ich kann kein C++...

    Nur ich weiß nich obs so geil is

    [edit2]es geht übrigens nich xD

    [edit3]hab den fehler gefunden, aber die bitmap die jetzt angezeigt wird, ist nach wie vor 0% transparent...?


Anmelden zum Antworten