Newsgroup: it.comp.programmare.win32
Titolo: Dove sbaglio? (MS-VC++)

Vorrei copiare una parte dello schermo e visualizzarla nella parte alta
dello schermo.
dc e' il CDC della OnDraw()
{
    dcMemory.CreateCompatibleDC(dc);
    m_bmp->CreateCompatibleBitmap(dc,Lunghezza,Altezza);
    dcMemory.SelectObject(m_bmp);
    dcMemory.PatBlt(0,0,Lunghezza,Altezza,PATCOPY);
    BOOL ret  = dc->BitBlt(0,0,Lunghezza,Altezza,&dcMemory,400,400,SRCCOPY);
  }
Il risultato e' che parte dello schermo mi diventa nero....
Qualche consiglio.
Grazie

 nero....
Se ho capito bene cosa vuoi fare, devi usare BitBlt() o StretchBlt()
anche la prima volta, non PatBlt(). Quest'ultima riempie il tuo bitmap
usando il brush selezionato (che di default e` appunto un solid brush
nero), non ti copia parte dello schermo.
---
Bye! Lorenzo Lutti
http://www.geocities.com/cirovampiro/

Io dico che il PatBlt è assolutamente inutile... non devi sostituirlo a
niente, eliminalo semplicemente!!!
Già il SelectObject(m_bmp) ti basta per copiare poi la tua bitmap su dc.
(con il successivo BitBlt())
 ---  MiB ----
"Lorenzo Lutti" <lorenz...@DOHtiscalinet.it> ha scritto nel messaggio
news:JIYO5.31092$BF.10...@news.infostrada.it...


Qualche consiglio.
Per usare PatBlt devi creare un brush e selezionarlo all'interno del tuo 
DC.
Per "parte dello schermo" intendi parte della tua finestra o letteralmente 
che una parte del desktop (anche al di fuori della tua client-area) diventa 
nera? In questo caso è possibile che il dc che utilizzi come destinatario 
delle tue operazioni sia impostato a NULL o si riferisca allo schermo e sia 
stato ricavato utilizzando GetDC(NULL o GetDesktopWindow).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 (con il successivo BitBlt())
Si`, ma a quanto ho capito lui vuole copiare una porzione di schermo su
un bitmap e poi tornarla a copiare su schermo da un'altra parte.
Piuttosto al limite puo` togliere del tutto le funzioni per i bitmap, se
non vuole manipolare l'immagine che "cattura" da schermo: il compatible
DC e` piu` che sufficiente.


 DC e` piu` che sufficiente.
No, ora che ci penso ho detto una stupidata. :)
Il compatible DC disegna sempre nel bitmap che vi e` selezionato e di
default e` selezionato un bitmap monocromatico 1x1 (o qualcosa del
genere)... mi e` venuto in mente pensando al fatto che in
un'applicazione avevo creato un bitmap troppo piccolo per un memry DC, e
parte del blit (quella oltre le sue estensioni) veniva nera o "sporca".


Grazie per le risposte cerchero' di essere piu' chiaro.
Ho un vettore di punti che stampo nella OnDraw.
Per evitare che tutte le volte tramite la DrawPolilyne tracci le linee per
ridisegnare l'oggetto ho pensato di catturere la bitmap associata alla
visualizzazione e di stampare quella. Ora la bitmap viene spostata per fare
delle operazioni di Pan e vorrei ripristinare quella di partenza.
dc->Bitblt(0,10,lunghezza,altezza-10,dc,0,10,SRCCOPY)
mi sposta la bitmap di 10 pixel, poi se voglio rispristinare la bitmap
iniziale come posso fare senza richiamre la OnDraw().
Ho pensato con un dcMemory:
dc->Bitblt(x,y,lunghezza-x,altezza-y,&dcMemory,x,y,SRCCOPY)
ed alla fine
dc->Bitblt(0,0,lunghezza,altezza,&dcMemory,0,0,SRCCOPY)
per ripristinare l'immagine iniziale.
 ma non trovo la sequenza giusta per creare la dcMemory che deve avere
inizialemente la stessa immagine della dc.
La dc e' lo stesso puntatore a CClientDC che uso per stampare la polilinea.
Grazie