Error: Error de GP al dibujo en un controlador de dominio basado en memoria

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 111864
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Síntomas
Puede producirse un error de protección general (GP) en un contexto de dispositivo basado en memoria (DC) cuando se selecciona un mapa de bits seleccionado anteriormente en el controlador de dominio fuera y otro está seleccionada en. Éste es un problema común al utilizar las funciones SaveDC() y RestoreDC() con un DC de memoria.
Causa
En un controlador normal (basada en nonmemory), cuando se utilizan las funciones SaveDC() y RestoreDC(), el tamaño del área de ventana de cliente del controlador de dominio no cambia. El tamaño del área con estas características en un controlador de dominio basado en memoria de depende de que el tamaño del mapa de bits actual seleccionado en el controlador de dominio.

Por ejemplo, suponga el mapa de bits monocromo de predeterminado 1 x 1 está seleccionado en un DC de memoria y llamar a SaveDC(). Ahora, seleccione un mapa de bits 200 x 200 color en el controlador de dominio y realizar algunos comandos de dibujo. A continuación, se llame a RestoreDC() para restaurar el controlador de dominio. Esta acción selecciona el mapa de bits 1 x 1 antiguo en el controlador de dominio. Desafortunadamente, GDI no actualiza la región de recorte cuando ocurra esto, y cuando se dibuja fuera de la región 1 x 1, puede recibir un error de protección general.
Solución
Después de llamar a RestoreDC() en un controlador de dominio basado en memoria, deberá llamar a SelectObject() para seleccionar el mapa de bits que seleccionó en el controlador de dominio antes de llamar a RestoreDC().
Estado
Microsoft ha confirmado que trata de un error de Windows versión 3.1. Se está investigando este problema y se publicará nueva información aquí, en Microsoft Knowledge Base, cuando esté disponible.
Más información
El código siguiente presenta el problema descrito anteriormente. Cuando se llama a CreateCompatibleDC(), se selecciona un mapa de bits monocromo de predeterminado 1 x 1 en el DC devuelto por la función. Al restaurar el mapa de bits 1 x 1 inicial después de obtener una región visible del GDI 200 x 200, piensa 1 x 1 superficie tiene un rectángulo de recorte de 200 x 200. Esto es lo que hace que la sobrescritura.

Código de ejemplo

   HBITMAP hbm1,hbm2;   HDC     hdcBits,hdcScreen;   hdcScreen = GetDC(NULL);   hdcBits = CreateCompatibleDC(hdcScreen);   hbm1 = CreateCompatibleBitmap(hdcScreen,200,200);   hbm2 = CreateCompatibleBitmap(hdcScreen,200,200);   SaveDC(hdcBits);   SelectObject(hdcBits,hbm1);   PatBlt(hdcBits,0,0,200,200,WHITENESS);   RestoreDC(hdcBits,-1);   SaveDC(hdcBits);   SelectObject(hdcBits,hbm2);   PatBlt(hdcBits,0,0,200,200,WHITENESS);   Ellipse(hdcBits,0,0,200,200);   RestoreDC(hdcBits,-1);   Rectangle(hdcBits,0,0,200,200);				
buglist3.10 3.10 gpf gp error 1 x 1 200 x 200

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 111864 - Última revisión: 02/02/2014 08:43:20 - Revisión: 1.0

Microsoft Windows Software Development Kit 3.1

  • kbnosurvey kbarchive kbmt KB111864 KbMtes
Comentarios