C/Visual C - Salvar una porcion de la pantalla

 
Vista:

Salvar una porcion de la pantalla

Publicado por Julio Gillo (1 intervención) el 14/05/2003 14:17:46
Hola necesitaria salvar una porcion de la pantalla en una variable para por ejemplo borrarla y no tener que dibujarla por codigo nuevamente, restauro lo que salve y listo.

Si alguien sabe como puedo hacerlo, les agradedzco

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Guardar y restaurar una porción de la pantalla en MFC

Publicado por Alejandro (1135 intervenciones) el 02/06/2025 23:09:09
Julio, para guardar una porción de la pantalla en una variable y luego restaurarla, puedes utilizar un `CDC` (Device Context) en MFC para capturar el área deseada y luego dibujarla de nuevo cuando lo necesites. A continuación, te muestro cómo hacerlo paso a paso.

1. Capturar la porción de la pantalla



Puedes usar un `CBitmap` para almacenar la imagen de la porción de la pantalla que deseas guardar. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <afxwin.h> // Asegúrate de incluir el encabezado de MFC
 
class CMyView : public CView
{
protected:
    CBitmap m_bitmap; // Bitmap para almacenar la porción de la pantalla
    CRect m_rect;     // Rectángulo que define la porción a capturar
 
public:
    void SaveScreenArea(CRect rect);
    void RestoreScreenArea(CDC* pDC);
};
 
// Método para guardar la porción de la pantalla
voidCMyView::SaveScreenArea(CRect rect)
{
    // Guardar el rectángulo que se va a capturar
    m_rect = rect;
 
    // Crear un bitmap compatible con el DC de la ventana
    CDC* pDC = GetDC();
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    m_bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
 
    // Seleccionar el bitmap en el DC de memoria
    CBitmap* pOldBitmap = memDC.SelectObject(&m_bitmap);
 
    // Copiar la porción de la pantalla al bitmap
    memDC.BitBlt(0, 0, rect.Width(), rect.Height(), pDC, rect.left, rect.top, SRCCOPY);
 
    // Restaurar el bitmap original
    memDC.SelectObject(pOldBitmap);
    ReleaseDC(pDC);
}
 
// Método para restaurar la porción de la pantalla
void CMyView::RestoreScreenArea(CDC* pDC)
{
    // Dibujar el bitmap en el DC proporcionado
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = memDC.SelectObject(&m_bitmap);
 
    // Dibujar el bitmap en la posición original
    pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(), &memDC, 0, 0, SRCCOPY);
 
    // Restaurar el bitmap original
    memDC.SelectObject(pOldBitmap);
}

2. Uso de los métodos



Para usar estos métodos, simplemente llama a `SaveScreenArea` con el rectángulo que deseas capturar y luego llama a `RestoreScreenArea` cuando necesites restaurar la imagen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CMyView::OnSomeAction()
{
    // Definir el área a capturar
    CRect rect(50, 50, 200, 200); // Cambia las coordenadas según sea necesario
 
    // Guardar la porción de la pantalla
    SaveScreenArea(rect);
 
    // Realizar alguna acción que borre o cambie la pantalla
    // ...
 
    // Restaurar la porción de la pantalla
    CDC* pDC = GetDC();
    RestoreScreenArea(pDC);
    ReleaseDC(pDC);
}

Consideraciones



- Rendimiento: Capturar y restaurar áreas de la pantalla puede ser costoso en términos de rendimiento, así que asegúrate de que esto no afecte la fluidez de tu aplicación.
- Recursos: Asegúrate de liberar cualquier recurso que hayas creado, como el `CDC` y el `CBitmap`, si es necesario.
- Redibujar: Si la ventana se minimiza o se cubre, es posible que necesites redibujar la porción de la pantalla nuevamente.

Conclusión



Con este enfoque, puedes guardar y restaurar una porción de la pantalla en MFC sin tener que redibujarla manualmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
OSZAR »