Zeichnen - CDC::DrawText transparent



  • hi Leute,
    Ich hab hier ein Problem:
    Ich will nen Text ausgeben, der genauso aussieht, wie ein inaktiver Menüeintrag. Wenn man sich einen inaktiven Menüeintrag anschaut, dann sieht man, dass zuerst der Text mit weiss geschrieben wurde (um je 1 Pixel nach links und nach unten versetzt) und dann darüber der Text mit der normalen Inactive-Farbe geschrieben wurde, allerdings, war beim zweiten Schreibvorgang die Hintergrundfabe transparent, sonst würde der alte text (der weisse), ja von der Hintergrundfarbe des neuen Textes übermalt werden. Und genau das ist mein Problem:
    Ich bekomm keine transparente Hintergrundfarbe hin, der weisse Text wird also immer übermalt 😞
    Weiss jemand Rat?



  • SetBkMode(hDC, TRANSPARENT);



  • Hier die etwas genauere beschreibung ...

    Als erstes die Funktion WM_CTLCOLOR mittels Klassen-Assistent einfügen.

    Dort kommt dann folgendes rein...

    HBRUSH CZeiterfassungDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    
            // ** Damit sind alle Texte mit IDC_STATIC Tranzparent ** //
        if (nCtlColor == CTLCOLOR_STATIC)   
        {       
            pDC->SetTextColor(RGB(255,255,255));       // ** Textfarbe **
            pDC->SetBkMode(TRANSPARENT);
            return (HBRUSH)GetStockObject(NULL_BRUSH);
            }
    
           // ** Damit ist der Text mit der ID IDC_USER Tranzparent ** //
        if (nCtlColor == IDC_USER)  
        {       
            pDC->SetTextColor(RGB(255,255,255));        // ** Textfarbe **
            pDC->SetBkMode(TRANSPARENT);
            return (HBRUSH)GetStockObject(NULL_BRUSH);
            }   
    
        return (HBRUSH)GetStockObject(NULL_BRUSH);
    }
    

    Wäre das nicht was für die FAQ

    AndOne 😃



  • Nemesyzz' Antwort hat schon gereicht 🙂
    Vielen Dank.
    ->FAQ


Anmelden zum Antworten