¿Puedo crear un contexto de dispositivo que es sólo una parte de otro dispositivo de contexto?

StackOverflow https://stackoverflow.com/questions/4551280

  •  13-10-2019
  •  | 
  •  

Pregunta

He subclase un control gráfico que toma un identificador de contexto de dispositivo, HDC, como una entrada y usos que para el dibujo. Mi nuevo control es el control original centrada en la parte superior de una imagen más grande. Me gustaría ser capaz de llamar al método Draw del control original () para la reutilización de código, pero estoy seguro de cómo proceder.

Esta es la idea:

void CCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // original method draws a checkbox
}

void CBorderedCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // Draw my image here
    // Create new hdc2 and hdcTemp2 which are just some portion of hdc and hdcTemp
    //   For example, hdc2 may just be a rectangle inside of hdc that is 20 pixels 
    //   indented on all sides.
    // Call CCheckBox::DrawCtrl() with hdc2 and hdcTemp2
}
¿Fue útil?

Solución

creo que puede ser confundido de lo que es un contexto de dispositivo. Un contexto de dispositivo es un lugar en la memoria que se puede dibujar a, ya sea el búfer de pantalla o un mapa de bits o algo más. Desde Imagino que sólo desea dibujar en la pantalla, que sólo necesita un DC. Para lograr lo que desea, yo recomendaría pasar un rectángulo con la función que le dice dónde trazar. Opcionalmente, y con un peor rendimiento, se podría crear un nuevo mapa de bits para el área más pequeña, y dar a la función de CC del mapa de bits para dibujar. Ahora que lo pienso, que podría haber sido lo que quería decir en el primer lugar!: P Buena suerte

Otros consejos

Aunque no es infalible, que se puede fingir un DC como una subsección de un DC mediante el uso de una combinación de SetViewportOrgEx y SelectObject con una región recortada a la zona sub en cuestión.

El problema con este enfoque es si el código de dibujo ya utiliza estas API que necesita para reescrito para ser consciente de que tiene que combinar su enmascaramiento y la compensación de los desplazamientos existentes y el recorte de las regiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top