Bitmap-Hintergrund und Transparenz?



  • Hi,
    ich habe in meiner Dialoganwendung als Hintergrund eine Bitmap gelegt und nun sind z.B. alle Texte auf einem Balken der entsprechenden Hintergrundfarbe. Das sieht aber echt Sch... aus. Wie bekomme ich das Transparent? Also es soll nur der eigentliche Text zu sehen sein über der Bitmap. Das gleiche gilt natürlich auch für die Steuerelemente.

    Bitte um Hilfe!

    Gruß



  • Wähle das Textfeld aus und gehe in die Eigenschaften.
    Dort findest du unter der Registerkarte "Erweiterte Formate" den Eintrag "Transparent".



  • Das weiß ich ja auch. Aber das funktioniert so nicht.
    Gibt es da noch einen Trick oder so?



  • Hatten wir schon tausendmal.... einfach OnCtrlColor und da gucken obs nen static ctrl ist... dann einfach schnell setbkmode(transprarent); fertig...



  • (D)Evil schrieb:

    Hatten wir schon tausendmal.... einfach OnCtrlColor und da gucken obs nen static ctrl ist... dann einfach schnell setbkmode(transprarent); fertig...

    Wird dies nicht mittels der Registerkarte "Erweiterte Formate" und dem Eintrag "Transparent" erledigt?



  • (D)Evil schrieb:

    Hatten wir schon tausendmal.... einfach OnCtrlColor und da gucken obs nen static ctrl ist... dann einfach schnell setbkmode(transprarent); fertig...

    Kannste da nicht mal bitte ein Beispiel hinschreiben. Ich hab keine Ahnung, wie ich da an mein Element rankomme.



  • Wenn es das hier schon tausend mal gab, dann sag wenigstens mal wo das stehen soll. Ich suche mich schon wund. Ich finde einfach nichts dazu!!!!



  • HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	::HBRUSH__* hbr = NULL;
    
    	if(nCtlColor == CTLCOLOR_STATIC)
    	{
    		pDC->SetBkMode(TRANSPARENT);
    		hbr = (::HBRUSH__*)GetStockObject(NULL_BRUSH);
    	}
    	else
    		hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	return hbr;
    }
    

    Referenzen:
    CWnd::OnCtlColor



  • Danke, Danke, Danke!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • Jetzt habe ich doch noch ein Problem!!!

    Ich habe da in meinem Dialog eine Anzeige von Zahlen, die runterzählt. So nun wird bei der transparenten Darstellung zwar die nächste Zahl angezeigt, aber die vorhergehende bleibt stehen. Ich habe das jetzt mit Invalidate() gemacht und das geht auch, aber er zeichnet ja jetzt den kompletten Dialog neu. Nun habe ich das mit InvalidateRect() nur für den Bereich gemacht und das sieht aber auch irgendwie nicht so toll aus.

    Gibt es da noch ne Andere Methode?



  • Schu mal hier:
    http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel4.htm

    ist nur zu empfehlen: echt klasse!

    gruß



  • Damit habe ich ja meine Bitmap als Hintergrund eingebunden, aber das löst ja leider nicht mein Problem!!!
    Bei dieser transparenten Darstellung ist ja das Problem. Das hat doch eigentlich nichts mit dem Einbinden der Bitmap zu tun, Oder?
    Die Anzeige wird einfach nicht richtig aktualisiert. Zumindest nicht so, wie ich das gern hätte!
    Die Frage ist ja, warum das bei einer transparenten Darstellung mit OnCtlColor nicht richtig aktualisiert wird?
    Das muß doch anders gehen, als mit InvalidateRect(). Man sieht das einfach zu stark, daß da was neu gezeichnet wird!!!!!!!!!!!

    Bitte um Hilfe!!



  • Hm... was soll den bei InvalidateRect das PRoblem sein... rufst du denn mit Erase oder ohne auf? Aja.. evt. das Rect einfach nur auf die Zahlen beschrnken die wirklich gezeichnet werden...



  • (D)Evil schrieb:

    Hm... was soll den bei InvalidateRect das PRoblem sein... rufst du denn mit Erase oder ohne auf? Aja.. evt. das Rect einfach nur auf die Zahlen beschrnken die wirklich gezeichnet werden...

    Das Problem ist, das man das einfach sieht, wie das Rechteck gezeichnet wird. Das ist halt zu langsam mit dem neu zeichnen. Nur auf die Zahlen beschränken wäre ja schon mal ein Ansatz, aber geht so etwas überhaupt?

    Mal grundsätzlich: Wieso zeichnet der Dialog das nicht genau so, wie ohne diese transparente Zuweisung durch OnCtlColor?

    Da muß doch etwas anderes gehen, Oder? Es gibt doch so viele Dialoganwendungen, die transparente Schrift drin haben und da sehe ich so ein Neuzeichnen doch auch nicht. Oder ist die MFC einfach zu besch... programmiert?



  • Hmm hat mit beidem nix zu tun 😉

    Wie das geht? Ganz einfach... hol dir die Fonthöhe... (Nicht den Wert den de beim Font erstellen angegeben hast 😉 ) Dan guckst de wo das 1. Zeichen ist... holst die dir Fontbreite und addiert so viele bis zu beim momentanen bist..



  • Das ist doch das selbe in grün. Er zeichnet mir doch immer wieder nur das Rechteck. Ob das nun 2 Pixel kleiner ist oder nicht, ist doch egal!!!

    Gibt es da bei dieser Transparent-Geschichte nicht noch eine andere Möglichkeit, so daß es einfach aktualisiert wird?
    Wenn das nicht Trasparent ist zeichnet er mir doch auch nicht alles neu, sondern eben nur das Zeichen!


Log in to reply