丈人網

【原】GDI與GDI+混合編程中發現的一個問題及解決方法

    最近在做一個地圖數據處理程序,其中用到了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的基本功能了呢?或許官方應該給出一個確切的答案來。