Text auf Bitmap



  • Hallo zusammen

    Ich würde gerne ein Text auf einem Bild (BMP) anzeigen und mit einem Button
    Aktualisieren..

    Bild Laden und Text anzeigen klappt aber ich kann den Text nicht Aktualisieren
    so gehe ich vor..

    In onPaint Lade ich das bild im else block

    else
    	{
    // CPaintDC dc(this); 
    
    // CPaintDC* pDC = &dc; 
    
      BITMAP bmBackground;                                //BITMAP-Struktur bm deklarieren 
      Bild[0].GetObject(sizeof(bmBackground),&bmBackground); //Größe und Adresse von CBitmap Bild[0] --> BITMAP bm 
    
      CDC memDC; 
      memDC.CreateCompatibleDC(pDC);    //SpeicherDC initialisieren 
      memDC.SelectObject(&Bild[0]);     //Hintergrundbild --> Speicher 
    
      RECT Rect; 
      GetClientRect(&Rect); 
      pDC->StretchBlt(0,0,Rect.right,Rect.bottom,&memDC,0,0, 
                      bmBackground.bmWidth,bmBackground.bmHeight,SRCCOPY); 
    
    		CDialog::OnPaint();
    	}
    
    Mit der funktion OnEraseBkgnd schreibe ich den Text
    
    BOOL CBmpFondsDlg::OnEraseBkgnd(CDC* pDC)
    {
    	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder 
    	CString sFey="Hallo";
    	pDC->SetTextColor(GetSysColor(COLOR_APPWORKSPACE));
    	pDC->SetBkMode(TRANSPARENT);
    	    pDC->TextOut(350,30,sFey);
    
       // ::DrawIconEx(*pDC,190,190,m_ahShellIcon[10],0,0,0,NULL,DI_NORMAL);
        return TRUE;
    
    }
    
    Mit dem Button Möchte ich den Text Aktualisieren
    
    void CBmpFondsDlg::OnBnClickedButton1()
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    CDC* pDC;
    	CString sFey="Hallo es Klappt";
    	pDC->SetTextColor(GetSysColor(COLOR_APPWORKSPACE));
    	pDC->SetBkMode(TRANSPARENT);
    	    pDC->TextOut(350,30,sFey);
    	CBmpFondsDlg::OnEraseBkgnd(pDC);
    }
    

    Ich bekomme keine fehler meldung aber wenn der Button gedrückt wird gibts absturz..

    was mache ich falsch?
    Danke im voraus



  • Naja erstma wenn du schon CDC *pDC machst dann bitte so: CDC *pDC = new CDC();
    und dann must du trotzdem imma noch pDC->CreateCompatibleDC(GetDC()); zum bsp machen. Denke das sollte helfen den absturz zu verhinden. Achja Delete am ende net vergessen ne.
    Und dann warum machste das den so kompliziert? es reicht doch wenn du einmal in OnPaint schreibst das er den text aus einer varibale über dem Bild malen soll. Und wenn du auf den Butten drückst dannspeicherst du nur den text in die Varibale und schreibst danach Invalidate(1); fertig schon wird nen neuzeichnen veranlast und da du da ja den text aus der varaible zeichnen läßt mach er den neuen text. Vieleicht habe ich ja den sinn net richtig verstanden aba so sollte das doch viel einfacher sein.



  • void CBmpFondsDlg::OnBnClickedButton1()
    {
    // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    CDC* pDC;
    .
    .
    .
    

    Ich behaupte jetzt einfach mal, dein pDC zeigt ins Nirwana....



  • Danke erst mal für die antworten..

    Ich bin neuling hab bis jetz nur mit Mfc standard steuerelementen gearbeitet.
    ich schreibe ein music programm... das hintergrund bild hab ich mit corel gezeichnet.in diesem bild sind stellen für anzeige vorgesehen. für tempo,chord,sound usw
    Da hab ich mir gedacht anstatt Text Controll an die stellen zuplatzieren
    kann ich vielleicht den text aus geben..

    mit Text Controll bekomme ich den hintergrund nicht transparent..

    ich weiss nicht ob es der richtige weg ist..



  • xyz44 ich habe mit Invalidate(1); probiert es funktioniert aber leider mit einem neben effekt beim neu zeichnen ist das bild kurtz weg.. ich glaube das ist nicht der richtige weg ich muss doch mit steuerelementen arbeiten aber wie kann ich den Text Transparent anzeigen lassen? oder ist das auch nicht der richtige weg?



  • dieser blitz ist normal. Benutze mal Invalidate(0) und wenn es trotzdem kurz aufblitzt dann überschreibe deine OnEraseBkgnd und schreibe da return 0; rein. Allerdings must du dann in deine Paint Methode den ganze bldschirm malen.



  • Da hab ich mir gedacht anstatt Text Controll an die stellen zuplatzieren
    kann ich vielleicht den text aus geben..

    mit Text Controll bekomme ich den hintergrund nicht transparent..

    ich weiss nicht ob es der richtige weg ist..

    Hab die Lösung dieses Problems in nem anderen Thread beantwortet 😉


Anmelden zum Antworten