2010-11-16 3 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

+2

@Max: Вы указываете, что IDB_WALL является ресурсом PNG. 'LoadBitmap' может загружать только файлы растрового изображения (BMP), хотя редактор ресурсов может отображать другие форматы. – casablanca

+0

@casablanca: ... тьфу. Это должно было быть очевидно. +1 для указания этого. Спасибо за вашу помощь. – Max

Смежные вопросы