TCanvas中SaveDC和RestoreDC的用法 (轉)

worldblog發表於2008-01-06
TCanvas中SaveDC和RestoreDC的用法 (轉)[@more@]

  TCanvas中SaveDC和RestoreDC 的用處

摘要:這篇文章展示如何正確地使用TCanvas中的SaveDC和RestoreDC.作者是Vyatcheslav Baranov.

  的GDI“SaveDC“和”RestoreDC”可以儲存和恢復裝置場景狀態(device context state)。可是TCanvas類並沒有封裝這兩個函式。但是,這些函式對於恢復裝置場景狀態卻又是非常必要的。例如, IntersectClipRect函式而發生文章中剪下區域發生改變時。

問題
在TCanvas中使用SaveDC和RestoreDC有兩個問題.

第一個問題是呼叫Restore後將造成裝置場景狀態與TCanvas狀態不相符合。
第二個問題出現在中.問題發生在呼叫SaveDC和RestoreDC函式時,當還沒有刪除SaveDC就在裝置場景中選擇了GDI(font,pen或brush). 這是WIN9X中一個普遍的缺點。

解決方案
解決第一個問題,就是在RestoreDC後呼叫TCanvas的Refresh函式。Refresh方法可以把裝置場景轉換回到預設狀態(利用被選擇的物件)並且將TCanvas設定成取消選定狀態.因此,裝置場景的真實狀態和TCanvas狀態會相互對應起來。

第二個問題的解決有一點困難.非常有必要將TCanvas的Handle屬性值存放進一個附加的變數中,以便我們能呼叫TCanvas的Refresh方法。這時我們可以將這個附加變數作為DC引數呼叫SaveDC函式。

Refresh方法將把裝置場景設定成預設狀態。這個附加變數的使用可以將裝置場景存入這個預設狀態。

下面的程式碼演示了SaveDC和RestoreDC的一般用法:
HDC DC;
int SaveIndex;

DC = Canvas->Handle;
Canvas->Refresh ();
SaveIndex = SaveDC (DC);
 .
 . // 一些對TCanvas的呼叫 ...
 .
RestoreDC (DC, SaveIndex);
Canvas->Refresh ();
 .
 . // 一些對TCanvas的其他呼叫 ...

更多的資訊可在以下站點找到: 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996675/,如需轉載,請註明出處,否則將追究法律責任。

相關文章