TCanvas中SaveDC和RestoreDC的用法 (轉)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 轉 sql 中 case 的用法SQL
- [轉載] Python中協程的詳細用法和例子Python
- js中try和catch的用法JS
- C#中?和??及?:的用法C#
- JS中的!=、== 、!==、=== 的用法和區別JS
- JS中的!=、== 、!==、===的用法和區別。JS
- linux中#和## 用法Linux
- js中!和!!的區別與用法JS
- Java 中 this 和 super 的用法詳解Java
- React中的Context和Portals用法ReactContext
- sql中union和union all的用法SQL
- Java中ThreadLocal的用法和原理Javathread
- JS中apply和call的用法JSAPP
- SQL中IN和EXISTS用法的區別SQL
- oracle中的exists和not exists和in用法詳解Oracle
- 【轉】C#中dynamic的正確用法C#
- JS中陣列Array的用法{轉載}JS陣列
- C#中File 類的用法 轉載C#
- scanf()函式的用法和實踐 (轉)函式
- ORACLE 中ROWNUM用法總結! (轉)Oracle
- PHP中MySQL、MySQLi和PDO的用法和區別PHPMySql
- JQuery中html()和val()的用法區別jQueryHTML
- React 中 getDerivedStateFromProps 的用法和反模式React模式
- Python中__init__的用法和理解Python
- oracle中的CURRVAL和NEXTVAL用法Oracle
- Lombok中@Builder和@SuperBuilder註解的用法LombokUI
- Objective-C中的@property和@synthesize用法Object
- sql中的group by 和 having 用法解析SQL
- oracle中的exists 和not exists 用法詳解Oracle
- SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差別SQL
- fstream中ifstream和ofstream的簡單用法
- SQL中 CONVERT轉化函式的用法SQL函式
- SQL中CONVERT轉化函式的用法SQL函式
- Windows XP 中Net命令的另類用法(轉)Windows
- php的lavarel框架中join和orWhere的用法PHP框架
- Linux shell用法和技巧(轉)Linux
- C++中break和continue的用法和區別C++
- 轉載golang中net/http包用法GolangHTTP