Посмотрел. Но где, собственно, ответ на мой вопрос? как создавать второй DC я знаю.
Мне нужен битмап который больше окна. Проблема в том, что в маленьком приложении создается большой битмап, а в моем (отнюдь не маленьком) большой битмап создать нельзя.
использовал CreateCompatibleBitmap(&backBuff, m_Size.cx, m_Size.cy)
вместо CreateCompatibleBitmap(&dc, m_Size.cx, m_Size.cy)
Заработало. битмап размером 6000*6000 создает
предыдущее решение позволяет создавать монохромный битмап
Для создания полноцветного битмапа можно (и нужно) использовать CreateDIBSection.
//процедура создания DIB растра
HBITMAP CMyView::CreateDIB(HDC hdc, int cx, int cy)
{
BITMAPINFO bmi;
LPVOID pBitmapBits=NULL;
LPVOID pBytes=NULL;
HBITMAP hDib=NULL;
// Запоняем структуру BITMAPINFO
memset(&bmi, 0, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = cy;
bmi.bmiHeader.biPlanes = 1;
// 24 бита на цвет. В этом случе будут тройки RGB
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = ((((cx * bmi.bmiHeader.biBitCount) + 31) &~31) >> 3) * cy;
// Пытаемся создать DIB
hDib =::CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS,
&pBitmapBits, NULL, (DWORD)0);
//проверяем, что получилось
ASSERT(hDib);
return hDib;
}
И теперь, например:
CBitmap* m_pBitmap;
***
строку
m_pBitmap->CreateCompatibleBitmap(dc,cx,cy);
заменяем на
m_pBitmap->m_hObject=CreateDIB(dc.GetSafeHdc(),cx,cy);
(если не нравиться такое присвоение, то можно исп. метод FromHandle() класса CBitmap)
остальное оставляем всё так же.
from
http://www.rsdn.ru/Forum/?mid=21936Проблема решена.