2009-08-05 20 views

Respuesta

10

clase CDC ha definido operator HDC() que permite al compilador para convertir un objeto CDC para HDC implícita. Por lo tanto, si tiene CDC * y una función que toma HDC, simplemente desreferencia el puntero y lo envía a la función.

+0

Ok, gracias! No me encuentro con la palabra clave 'operador' demasiado, así que me sorprendió. – samoz

2

Just assign it.

CDC cdc = something. 
HDC hdc = cdc; 
if (hdc != 0) 
{ 
    //success... 
} 
3

CDC es una clase de C++ que, a una aproximación razonable, encapsula un HDC, que es un controlador para el contexto de un dispositivo.

La documentación que enlaza describe una conversión operator, que es una construcción C++ que las clases pueden proporcionar para permitir la conversión implícita de una instancia de una clase a otro tipo. En este caso, la conversión implícita da como resultado el identificador subyacente (HDC) que encapsula la instancia CDC.

Puede realizar la conversión utilizando una instancia CDC en cualquier lugar donde deba convertirse a HDC.

La mayoría simplemente:

void f(const CDC& cdc) 
{ 
    HDC hdc = cdc; 

    // use hdc here 
} 
14

Cuando haya CDC objeto se convertirá implícitamente a HDC cuando sea necesario:

CDC dc; 
HDC hdc = dc; // HDC hdc = dc.operator HDC(); 

Si tiene puntero a CDC objeto a continuación, utilizando la función GetSafeHdc se verá más claro:

CDC* pdc = SOME; 
HDC hdc = pdc->GetSafeHdc(); 
+1

GetSafeHdc() hizo el truco, gracias. – TechNyquist

Cuestiones relacionadas