我正在visualstudio2008下将一个应用程序从windowsmobile2003移植到windowsmobile6;
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的堆。你知道我做错了什么,更重要的是找到了解决办法吗?自从ce2.1以来,我一直在windowsce上使用类似于上面的代码,没有任何问题。
编辑:
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);