Tengo un cuadro de diálogo que cambia de tamaño. También tiene un fondo personalizado que puedo pintar en respuesta a una WM_ERASEBKGND de llamadas (en la actualidad una simple llamada a FillSolidRect).

Cuando el diálogo se cambia el tamaño, hay una tremenda parpadeo pasando. Para intentar reducir el parpadeo me enumerar todos los niños de windows y agregar a la región de recorte. Que parece ayudar un poco, ahora el parpadeo es sobre todo evidente en todos los controles que como se vuelva a pintar.

Cómo puedo hacer que el diálogo libre de parpadeo mientras se cambia de tamaño? Tengo la sospecha de doble búfer debe jugar un papel, pero no estoy seguro de cómo hacerlo que con un diálogo con los niños controles (sin necesidad de hacer todos los controles secundarios owner-draw o algo así).

Debo señalar que yo estoy usando C++ (no .NET), y MFC, aunque puro basada en Win32 soluciones son bienvenidas 🙂

NOTA: lo he intentado, pero que no funcionó (no sé por qué) fue:

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect, backgroundColor);

pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

OriginalEl autor DougN | 2008-10-02

6 Comentarios

  1. 8

    Suponiendo que «FillSolidRect» es el borrado de sus antecedentes, a continuación, devolver TRUE de la WM_ERASEBKGND.

    A hacer el doble búfer que ya casi están haciendo en su fragmento de código, usted tendrá que utilizar CreateCompatibleBitmap y seleccione que en su memDC.

    OriginalEl autor David L Morris

  2. 6

    Trate de añadir la siguiente línea a su función OnInitDialog:

        ModifyStyle(0, WS_CLIPCHILDREN, 0);
    

    OriginalEl autor Adam Pierce

  3. 5

    No hacer nada en el WM_ERASEBKGND manipulación y hacer el borrado como parte de su principal WM_PAINT. Usted puede pintar más inteligente para que usted solo se dibujan las inválida áreas, o más fácilmente, de doble búfer el dibujo.

    Por no hacer nada en el borrado de fondo, tienes todo tu código de dibujo en un lugar que debería hacer más fácil para los demás y mantener.

    OriginalEl autor Jeff Yates

  4. 5

    Si usted está apuntando a WinXP o superior, también puede utilizar el WS_EX_COMPOSITED estilo para habilitar el doble búfer de forma predeterminada para las ventanas de nivel superior con este estilo. Tener en mente que esto tiene su propio conjunto de limitaciones, específicamente, de no más de dibujo de OnPaint ciclos con GetDC, etc.

    OriginalEl autor adzm

  5. 4

    puede establecer el parámetro de la llamada a la función invalidaterect método como falsa. Esto evitará que usted envíe WM_ERASEBKGND cuando la ventana de actualización. Aquí es un buen enlace para evitar el parpadeo en la ventana.

    OriginalEl autor Imrank

  6. 3

    Doble búfer es de hecho la única manera de hacer este trabajo.

    Hijo de controles de cuidar de sí mismos, siempre y cuando te asegures de CLIPCHILDREN.

    OriginalEl autor Frank Krueger

Dejar respuesta

Please enter your comment!
Please enter your name here