CDC и CBitmap, по-видимому, поддерживают только зависящие от устройства растровые изображения. Возможно, вам больше повезет, если вы создадите свое растровое изображение с помощью :: CreateDIBSection , а затем добавите к нему CBitmap. Сырые интерфейсы GDI, к сожалению, немного седые.
Вероятно, вам не очень повезет с 20 000 x 20 000 при 32 BPP, по крайней мере, в 32-разрядном приложении, так как оно занимает около 1,5 ГБ памяти, но я получил верный HBITMAP с 16 битами на дюйм:
BITMAPINFOHEADER bmi = { sizeof(bmi) };
bmi.biWidth = 20000;
bmi.biHeight = 20000;
bmi.biPlanes = 1;
bmi.biBitCount = 16;
HDC hdc = CreateCompatibleDC(NULL);
BYTE* pbData = 0;
HBITMAP hbm = CreateDIBSection(hdc, (BITMAPINFO*)&bmi, DIB_RGB_COLORS, (void**)&pbData, NULL, 0);
DeleteObject(SelectObject(hdc, hbm));