2009-08-05 55 views

回答

10

CDC類已operator HDC()定義了允許編譯器可進行CDC對象轉換爲HDC隱含。因此,如果你有CDC *和一個採用HDC的函數,那麼你只需將指針解引用併發送給函數。

+0

好的,謝謝!我沒有太多地碰到'運營商'這個關鍵字,所以就把我扔了。 – samoz 2009-08-05 16:32:31

2

只分配它。

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

CDC是一個C++類,它能夠合理地近似封裝一個HDC,它是設備上下文的句柄。

鏈接到的文檔描述了一個轉換operator,它是C++構造,類可以提供允許從類的實例到其他類型的隱式轉換。在這種情況下,隱式轉換會導致實例封裝的底層句柄(HDC)。

您可以在任何需要將其轉換爲HDC的地方使用CDC實例執行轉換。

最簡單的:

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

    // use hdc here 
} 
14

當你CDC對象將被隱式轉換爲HDC必要時:

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

如果你有那麼指針CDC對象使用功能GetSafeHdc看起來會比較明確:

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

GetSafeHdc()做了詭計,謝謝。 – TechNyquist 2013-11-08 14:00:31