2010-11-16 105 views
0

我正在使用MFC,並試圖在屏幕上繪製圖像。我有以下OnDraw函數:BitBlt繪製一個空白圖像

void CgraphicstestView::OnDraw(CDC* pDC) 
{ 
CgraphicstestDoc* pDoc = GetDocument(); 
ASSERT_VALID(pDoc); 
if (!pDoc) 
    return; 

m_Bitmap.LoadBitmap(IDB_WALL); // m_Bitmap is a CBitmap member of CgraphicstestView 
            // IDB_WALL is a .png resource 
CDC dcMemory; 
dcMemory.CreateCompatibleDC(pDC); 
dcMemory.SelectObject(&m_Bitmap); 
pDC->BitBlt(10, 10, 32, 32, &dcMemory, 0, 0, SRCCOPY); 
} 

這將吸引到屏幕上,但目標區域是空白。 BitBlt正在工作,因爲將SRCCOPY更改爲BLACKNESS會繪製黑色矩形。任何人都能看到我失蹤的東西?

回答

1

我不得不猜測,問題是你的圖像在某種程度上是無效的。因爲我測試了它,它工作正常。 LoadBitmap返回一個HBITMAP,所以你可以這樣測試:

HBITMAP hresult = m_Bitmap.LoadBitmap(IDB_WALL); 
assert(hresult); 
+0

果然,這個斷言失敗了。現在弄清楚爲什麼它是無效的。在.rc文件中放置圖像有什麼常見的陷阱?當我在資源視圖中查看圖像時,圖像顯示正常。 – Max 2010-11-16 02:23:35

+2

@Max:你提到IDB_WALL是一個PNG資源。 LoadBitmap'只能加載位圖(BMP)文件,即使資源編輯器可能能夠顯示其他格式。 – casablanca 2010-11-16 02:47:13

+0

@casablanca:...呃。這應該是顯而易見的。 +1指出。謝謝你的幫助。 – Max 2010-11-16 03:47:19