Hola, realmente cuando pintas en el hBmp estas pintando sobre el bitmap. Supongo que te esta sucediendo esto porque cada vez que pintas vuelves a cargar el bitmap desde disco.
Prueba a cargarlo una sola vez y "matarlo" cuando termines de utilizarlo. De esta manera los cambios permaneceran.
En cuanto al
UNDO, (Por si las flais) se me ocurre que se puede ir salvando rectangulos de bitmap y guardandolos en un array anotando tambien las coordenadas de donde lo copiasteis.
Vamos, lo del UNDO es porque yo lo pediria, ya puestos... :DPara salvar un rectangulo de bitmap:
seleccionamos el bitmap en un dispositivo de contexto de memoria
- Code: Select all Expand view
hDCMem := CreateCompatibleDC( hDC )
hOldBmp := SelectObject( hDCMem, hBmp )
//creamos un bitmap en memoria del tamaño del rectángulo que queremos
hBmpMem := CreateCompatibleBitmap( hDC, aRect[4]-aRect[2], aRect[3]-aRect[1] )
//copiamos del bitmap inicial al destino el rectangulo que deseamos:
hDCMem2 := CreateCompatibleDC( hDC )
hOldBmp2 := SelectObject( hDCMem2, hBmpMem )
BitBlt( hDCMem2, 0, 0, aRect[4]-aRect[2], aRect[3]-aRect[1], hDCMem,
aRect[2], aRect[1], SRCCOPY ) //13369376
SelectObject( hDCMem2, hOldBmp2 )
SelectObject( hDCMem, hOldBmp )
DeleteDC( hDCMem2 )
DeleteDC( hDCMem )
En hBmpMem tenemos el trozo que hemos capturado. Lo metemos en un array y listo.
Hay que acordarse al final de todo este invento, cuando matemos el bitmap original y ya no nos sirva el array de bitmaps, de hacer un DeleteObject( aUndos[n] )
DeleteObject( aUndos[n+1] )
etc...
Bueno creo que mas o menos esta es la idea. Acordaros de liberar siempre lo que pilleis antes.
Un saludo
Paco Garcia