mfc device-context

mfc - Entender los contextos del dispositivo



device-context (1)

Un contexto de dispositivo es simplemente un lugar donde se produce el dibujo, de modo que si tiene dos DC diferentes, está dibujando en dos lugares diferentes. Algo así como un manejador de archivo.

Los Contextos del dispositivo pueden referirse a bienes raíces en la pantalla, o a mapas de bits que solo residen en la memoria, y probablemente en otros lugares, esos son solo los dos que puedo pensar en este momento.

Los contextos compatibles son los que tienen la misma organización subyacente de píxeles, lo que significa cantidad de bits por píxel, bytes por píxel, organización del color, etc. Los contextos de los dispositivos de mapa de bits de memoria pueden tener cualquier organización que desee, pero los contextos de su pantalla se relacionarán (eventualmente) con los almacenamientos intermedios en su tarjeta gráfica, que (según el modo, etc.) tendrán una organización de píxeles muy específica.

Tener contextos compatibles significa que es eficiente transferir datos de imagen entre ellos, porque se requiere poca o ninguna traducción de los datos. En el otro extremo, si tiene una paleta de 256 colores, un mapa de 8 bits e intenta ajustarla a una pantalla que tiene 8 bits cada uno de RGBA por píxel, cada último píxel requerirá un masaje significativo a medida que se copia y, por lo tanto, copiar es incompatible. bitmaps es mucho más lento. De acuerdo con la documentación de Win32 SDK, al menos BitBlt () y StretchBlt () "convierten el formato de color de la fuente para que coincida con el formato de destino", por lo que se puede hacer.

Investigue CreateCompatibleDC () y CreateCompatibleBitmap () como puntos de partida para crear contextos de dibujo que sean compatibles con los ya existentes.

SelectObject () controla qué recursos están activos actualmente en el contexto del dispositivo. Un contexto tiene un lápiz, un pincel, una fuente y un mapa de bits actuales. Estas hacen que muchas de las otras llamadas GDI sean más simples al permitirle especificar menos parámetros. Por ejemplo, no tiene que especificar la fuente cuando usa TextOut (), pero si desea cambiar la fuente, ahí es donde entra SelectObject (). Si alimenta a SelectObject () un identificador a una fuente, la devolución valor es un identificador de la fuente que estaba en vigor, y las operaciones posteriores utilizan la nueva fuente. El comportamiento es el mismo para los otros tipos de recursos, plumas, pinceles, etc.

Como un recién llegado relativo a MFC, veo mucho los Contextos de Dispositivo (DC). I vagamente entiendo que tiene algo que ver con el dibujo, pero los detalles no están muy bien explicados en ningún lugar que pueda encontrar. ¿Qué significa crear un "Contexto de dispositivo compatible" y por qué es importante? ¿Qué hace SelectObject y cómo debo hacer que un DC sea compatible primero?