Я портирую приложение с Windows Mobile 2003 на Windows Mobile 6 под Visual Studio 2008. Целевое устройство имеет экран с разрешением VGA, и я был удивлен, обнаружив, что следующий код не работает:
CClientDC ClientDC(this);
CRect Rect;
GetClientRect(&Rect);
int nWidth = Rect.Width(),nHeight = Rect.Height();
CBitmap Temp;
if (!Temp.CreateCompatibleBitmap(&ClientDC,nWidth,nHeight))
{
LogError(elvl_Debug,_T("Error creating bitmap (%s)"),LastSysError());
} else
{
BITMAP bmpinfo;
Temp.GetBitmap(&bmpinfo);
}
Код возврата из CreateCompatibleBitmap
равен 8, что означает «Недостаточно памяти для обработки команды.nWidth - 350, nHeight - 400, а дисплей - 16 бит на пиксель, поэтому моя битовая карта - колоссальные 280K.Устройство, которое я использую, имеет 256 МБ памяти программ, и я сказал компоновщику зарезервировать 4 МБ стека и 64 МБ кучи.Есть идеи, что я делаю не так, а главное решение проблемы?Я использую код, аналогичный описанному выше, в Windows CE, начиная с CE 2.1, без проблем.
Редактировать: Согласно сообщению Джоша Келли, я перешел на независимые от устройства растровые изображения, которые отлично работаютУстройство.Код теперь примерно такой
CClientDC ClientDC(this);
CRect Rect;
GetClientRect(&Rect);
int nWidth = Rect.Width(),nHeight = Rect.Height();
BITMAPINFOHEADER bmi = { sizeof(bmi) };
bmi.biWidth = nWidth;
bmi.biHeight = nHeight;
bmi.biPlanes = 1;
bmi.biBitCount = 8;
HDC hdc = CreateCompatibleDC(NULL);
BYTE* pbData = 0;
HBITMAP DIB = CreateDIBSection(hdc, (BITMAPINFO*)&bmi, DIB_RGB_COLORS, (void**)&pbData, NULL, 0);
CBitmap *pTempBitmap = CBitmap::FromHandle(DIB);