最近在做一個地圖數據處理程序,其中用到了GDI和GDI+混合使用。比如說我想在設備上輸出文本(各種千奇百怪的格式)和輸出一些點(SetPixel()),就涉及到了混合使用GDI和GDI+的問題。其中有一部分代碼如下:
//Graphics * pgp=......;
label 1: HDC hdc = pgp->GetHDC();
//SetPixel();
label 2: pgp->ReleaseHDC(hdc);
label 3: pgp->MeasureString();
label 4: pgp->DrawString();
上面的label x是為了說明問題而添加的。其中的label 3和label 4引起了我的注意。
下面重現我發現的問題:一開始的時候,我想在SetPixel附近就是用label 3和label 4(也就是說label 3/4b被編碼在label 1和label 2之間了),但是發現根本就不能得到測量字符串的結果,也看不到文本的輸出。而label 3和label 4在我的工程中的別的代碼段中卻可以正常工作。說實話,一開始我以為碰到鬼了。
後來,我猜測 是不是 不能在label 1之後到label 2之前 再使用Graphics的一些功能。與是將代碼調整到上面例子代碼的順序,一切OK。(不知還有沒有人也像我這樣碰到了這樣的問題?)
問題是解決了,我不禁有些疑惑,為什麼getHDC後就不能行使一些Graphics的基本功能了呢?或許官方應該給出一個確切的答案來。