es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer caché de los resultados de dibujo en un mapa de bits en WIN32?

Como hay eventos de hover y leave del ratón en la interfaz, si volver a dibujar en cada evento de leave conduce a una gran ocupación de recursos, ¿cómo se dibuja y cachéa en la memoria solo cuando se inicia el programa o la interfaz se notifica de cambios, y se envía InvalidateRect () para utilizar directamente el mapeo BitBlt en lugar de volver a dibujar en el resto del tiempo?

int dystat = 0;
int anistat = 0;
void CreatePanelDynamic(HWND h, HDC hdc, DRAWPANEL DrawFun, int Flag = 0)
{
//En hMemDC
if (PanelID == PrevPanelID)
{
if (dystat == 0)
{
RECT rc;
GetClientRect(h, &rc);

        BitBlt(hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, in_ghdc, 0, 0, SRCCOPY); //Por bitmap
    }
    else
    {
        _CreatePanel(h, hdc, DrawFun); //Directamente
        dystat = 0;
    }
    anistat = 0;
}
if (PanelID != PrevPanelID) //Animación
{
    if (Flag == 0)
    {
        CreatePanelAnimation(h, hdc, DrawFun);
        dystat = 1;
    }
    if (Flag == 1)
    {
        _CreatePanel(h, hdc, DrawFun);
        dystat = 1;
    }
    PrevPanelID = PanelID;
    anistat = 0;
}

}

Mi programa ya está usando MemDC.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para reducir la ocupación de recursos, sugiero utilizar InvalidateRect() para utilizar directamente el mapeo BitBlt en lugar de volver a dibujar en el resto del tiempo. Cuando se inicie el programa o se notifiquen cambios en la interfaz, dibújelo y guárdelo en caché en la memoria.

Comments are closed.