ビットマップの作成は CreateCompatibleBitmap()でDDBを作ることを推奨されてるけど、64MBのサイズまでしか確保できない。フルカラーだと1000ドット×16000ドットが限界。2chのログを丸ごとコピーすることができない。これに対応するには以下のような関数で、DDBの上限を超えてしまったらDIBを作れば良い。これだとPCに搭載したメモリ一杯まで確保することができる。
HBITMAP MyCreateBitmap( HDC hdc, int width, int height )
{
HBITMAP hBmp = NULL;
if( hdc )
hBmp = CreateCompatibleBitmap(hdc,wiwth,height);
if( hBmp == NULL ) {
BITMAPINFO biBmp;
memset(&biBmp, 0, sizeof(biBmp));
biBmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
biBmp.bmiHeader.biBitCount = 32;
biBmp.bmiHeader.biPlanes = 1;
biBmp.bmiHeader.biWidth = width;
biBmp.bmiHeader.biHeight = -height;
DWORD *lpdwPixel;
hBmp = CreateDIBSection(NULL, &biBmp, DIB_RGB_COLORS, (void **)(&lpdwPixel), NULL, 0);
}
return hBmp;
}