Пренасям приложение от 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. Устройството, което използвам, има 256mb програмна памет и аз казах на линкера да резервира 4mb стек и 64mb купчина. Някакви идеи какво правя грешно и по-важното решение? Използвам код, подобен на горния в 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);