2009-10-20 4 views
0

У меня возникли проблемы с CE BltBit из ранее созданного совместимого hdc на hdc устройства.ImageList и BltBit - ting

Следующий код работает:

hdc = pdis->hDC; 
FillRect(hdc, &(pdis->rcItem), (HBRUSH)GetStockObject(BLACK_BRUSH)); 
ImageList_Draw(himl, imageIndex, hdc, 15 , 30, ILD_NORMAL); 

Однако следующий раз рисует черный прямоугольник и не поместить изображение сверху.

 hdc = pdis->hDC; 
     hdcmem = CreateCompatibleDC(hdc); 
     FillRect(hdc, &(pdis->rcItem), (HBRUSH)GetStockObject(BLACK_BRUSH)); 
     ImageList_Draw(himl, imageIndex, hdcmem, 0 , 0, ILD_NORMAL); 
     BitBlt(hdc, 15, 30, 130, 100, hdcmem, 0, 0, SRCCOPY); 

Любые идеи приветствуются.

С наилучшими пожеланиями E

ответ

3

CreateCompatibleDC не делать то, что вы думаете, что он делает. На связанной странице:

Прежде чем приложение сможет использовать контекст устройства памяти для операций рисования, он должен выбрать растровое изображение правильной ширины и высоты в контексте устройства. Это можно сделать, используя CreateCompatibleBitmap, чтобы указать высоту, ширину и организацию цвета, необходимые для вызова функции.

Контексты устройств - это абстракция. Должно быть хранилище за ними - экран или, в вашем случае, растровое изображение.

+0

Ха-ха .. avakar вы мертвы правые. Спасибо. Я думал, что за DC есть блок памяти. Вы ответили на некоторые другие хихиканья, которые у меня были в голове. Еще раз спасибо. – EndsOfInvention

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