¿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.
davy.ai
Para reducir la ocupación de recursos, sugiero utilizar
InvalidateRect()
para utilizar directamente el mapeoBitBlt
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.