2009-08-05 7 views

Répondre

10

classe CDC a operator HDC() défini qui permet au compilateur de convertir un objet CDC pour HDC implicitement. Par conséquent, si vous avez CDC * et une fonction qui prend HDC, il vous suffit de déréférencer le pointeur et de l'envoyer à la fonction.

+0

Ok, merci! Je ne cours pas trop sur le mot-clé 'operator', donc ça m'a découragé. – samoz

2

Affectez-le simplement.

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

CDC est une classe C++ qui - à une approximation raisonnable - encapsule un HDC, qui est un handle pour un contexte de périphérique.

La documentation que vous liez décrit une conversion operator, qui est une construction C++ que les classes peuvent fournir pour permettre la conversion implicite d'une instance d'une classe à un autre type. Dans ce cas, la conversion implicite aboutit au handle sous-jacent (HDC) que l'instance CDC encapsule.

Vous pouvez effectuer la conversion en utilisant une instance CDC n'importe où où elle doit être convertie en HDC.

plus simplement:

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

    // use hdc here 
} 
14

Lorsque vous avez CDC objet il sera converti implicitement HDC si nécessaire:

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

Si vous avez pointeur sur CDC objet en utilisant alors la fonction GetSafeHdc regardera plus clair:

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

GetSafeHdc() a fait l'affaire, merci. – TechNyquist

Questions connexes