Bild dauerhaft im Hintergund?!



  • muss das nicht

    [cpp]pDC->SelectObject(**&pen);
    pDC->SelectObject(
    &**brush);
    [/cpp]

    heissen?

    edit: warum formatiert der das nun nicht?



  • THX an Paul_C.! Jetzt stürzt meine Anwendung nicht mehr ab! Leider wird der Kreis mit dem momentanen Code gar nicht angezeigt 😮

    So siehts in der OnPaint aus:

    CClientDC dc(this);
            CBitmap bitmap;
            bitmap.LoadBitmap(IDB_Sensorhintergrund);
            BITMAP bm;
            bitmap.GetObject(sizeof(bm), &bm);
            CDC speicherDC;
            speicherDC.CreateCompatibleDC(&dc);
            CBitmap* pOldBitmap = speicherDC.SelectObject(&bitmap);
            RECT rect;
            GetClientRect(&rect);
            dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight,
                      &speicherDC, 0, 0, SRCCOPY);
            speicherDC.SelectObject(pOldBitmap); 
    
    OnKreise(pDC,0,0,0,110,110,150,150);
    

    Die beiden Fehler die du mir gezeigt hast habe ich ausgebessert. Irgendetwas fehlt noch bzw. ist zu viel - aber was??? 😕

    chiao und Danke

    cha-OS



  • Schreib mal deinen Funktionsaufruf OnKreise(pDC,0,0,0,110,110,150,150)
    bevor du

    dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight,&speicherDC, 0, 0, SRCCOPY);
    

    ausführst.



  • EDIT:

    Also wieder was neues:

    Eigenartigerweise funktioniert das Minimieren mit folgendem Code in der OnPaint:

    else
    	{
    
    CClientDC dc(this); 
    		CBitmap bitmap; 
    		bitmap.LoadBitmap(IDB_Sensorhintergrund);
    
    		BITMAP bm; 
    		bitmap.GetObject(sizeof(bm), &bm); 
    
    CDC speicherDC; 
    		speicherDC.CreateCompatibleDC(&dc); 
    		CBitmap* pOldBitmap = speicherDC.SelectObject(&bitmap); 
    
    RECT rect;
    		GetClientRect(&rect); 
    
    		dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, 
    				  &speicherDC, 0, 0, SRCCOPY); 
    
    		speicherDC.SelectObject(pOldBitmap);
    
    OnKreis(0,0,0,110,110,150,150);
    
    CDialog::OnPaint();
        }
    

    Bleibt nur noch folgendes Problem:
    Schiebe ich beispielweise das Fenster über den Bildschirmrand hinaus, so zeichnet sich der Hintergrund wieder über die Kreise oder aber die Kreise werden gar nicht neu gezeichnet??!

    Bitte wiedereinmal um Hilfe 🙄

    chiao cha-OS



  • Hat wirklich keiner eine Lösung?? 😕

    Bitte helft mir das Problem zu lösen.



  • cha-OS schrieb:

    Hat wirklich keiner eine Lösung?? 😕

    Wie???? Die Lösung wurde doch schon zig-mal gesagt: Du darfst Nur einmal ein DC erzeugen!!!



  • ich erzeuge ihn ja auch nur einmal, aber ich bekomme es nicht hin, den Code für das Laden des Bildes so anzupassen, dass ich auch dort den Zeiger verwenden kann???!
    Hast du eine Idee??



  • Was ist denn Dein Problem? Wenn Du es schon in eine eigene Methode packen willst, dann übergibt einfach den dc... das wurde auch schon oft gezeigt...
    Ich perönlich würde es so machen:

    void CKreise::OnKreise(CDC &dc,int r, int g, int b, int x1, int y1, int x2, int y2) 
    {
    
      // jetzt mach was Du willst)
    }
    


  • JJJIIIIPPPPYYYYYYYYYY!!!!

    Ich habs endlich thx Jochen für den A**tritt -> hab neu angefangen, probiert und jetzt funktionierts wie am Schnürchen.

    Danke an alle für eure Geduld 🕶 😃

    c u
    cha-OS



  • Jochen Kalmbach schrieb:

    Ich perönlich würde es so machen:

    void CKreise::OnKreise(CDC &dc,int r, int g, int b, int x1, int y1, int x2, int y2) 
    {
    
      // jetzt mach was Du willst)
    }
    

    Eigentlich hatte Cha-os das doch so 'ähnlich' gemacht:

    void CKreise::OnKreise(CDC* pDC,int r, int g, int b, int x1, int y1, int x2, int y2)
    

    Naja, wie dem auch sei, ist wohl gelöst. 👍


Anmelden zum Antworten