Cómo se seleccionan y destruyen los objetos GDI con la función SelectObject

Como soy nuevo en Visual C ++, esta podría ser una pregunta muy básica relacionada con la selección de un objeto GDI.

El siguiente fragmento de código dibuja un círculo gris claro sin borde.

cPen pen(PS_NULL, 0, (RGB(0,0,0)));
dc.SelectObject(& pen);
CBrush brush (RGB (192,192,192));
dc.SelectObject (&brush);
dc.Ellipse(0,0, 100,100);

Todo lo que entiendo del fragmento de código es que primero se crea un Object of Pen, y es un NULL Pen que haría desaparecer el borde, luego el brush crea un Círculo de color gris, pero ¿cómo?dc ¿Usar la pluma si ya está utilizando el pincel? esto es un poco confuso

¿Cómo funciona el uso dedc.SelectObject() ayuda dos veces? Si el objeto de pincel sólido se usa para crear un círculo con color gris, ¿cómo ayuda la creación del objeto de lápiz, si se destruye de todos modos cuando se crea el objeto de pincel? ¿Cómo funciona exactamente esta cosa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta