2010-07-20 19 views
3

我有一個遺留系統寫在C++,MFC。 我正在檢查一段代碼,其中LoadBitmap()被替換爲LoadImage() API。在代碼中寫的評論說:「LoadBitmap()使用內核內存中的分頁池,如果使用量達到最大限制,則會彈出繪圖問題,因此應使用​​API」。LoadBitMap()API是否會創建繪畫問題?

我對此有點搜索,但沒有得到太多的信息。當我檢查了MSDN,他們說:「注意的是,使用LoadBitmap來加載OEM的位圖已被廢棄,只是爲了向後兼容支持」

我的問題是:1。 是否有與LoadBitmap() API的任何問題?爲什麼我們比LoadBitmap()更喜歡LoadImage()? 2.什麼是OEM bitmaps?如果我用LoadBitmap加載正常的BMP,是否有任何問題?

回答

3

LoadBitmap()只會創建顯示兼容位圖,而不是設備無關位圖(DIB)。而且,正如LoadBitmap() documentation本身所說的那樣,在頂部,「該功能已被功能所取代」。 LoadBitmap()幾乎令人驚訝,因爲我認爲自Windows 95起它已被LoadImage()取代!(只是表明它是多麼難降向後兼容性!)

OEM的位圖是可以通過傳遞一個空的hInstance參數和魔法lpBitmapName(如OBM_BTNCORNERS,OBM_CHECKBOXES被要求全系統預先定義的圖像等)。這些使用被Windows用來繪製UI的各個部分,但是現在由DrawFrameControl()來處理。再次,OEM位圖是一個古老的東西,「新」行爲已經存在了很長一段時間。除非你有強烈的理由想要使用LoadBitmap(),否則我會按照記錄的建議並使用LoadImage()。爲了得到LoadBitmap() - 相當於行爲,使用方法:

LoadImage(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); 

在新的代碼你可能真的想要一個與設備無關的位圖,你在這種情況下,有使用的LoadImage(),並且最後一個參數應該是「LR_CREATEDIBSECTION」。在使用遺留代碼的情況下,堅持使用「LR_DEFAULTCOLOR」可能更安全。