Шаг 650 - CDC::CreateCompatibleDC

virtual BOOL CreateCompatibleDC( CDC* pDC );

Возвращаемое значение
Отлично от нуля если функция успешна, иначе 0.

Параметры
pDC
Указатель на контекст устройства. Если pDC NULL функция создает контекст устройства памяти, который является совместимым с дисплеем системы.

Замечания
Создает контекст устройства памяти, который является совместимым с устройством, определенным pDC. Контекст устройства памяти - блок памяти, которая представляет поверхность отображения. Это может использоваться, чтобы готовить изображения в памяти перед копированием их к фактической поверхности устройства совместимого устройства.
Когда контекст устройства памяти создан, GDI автоматически выбирает одноцветный точечный рисунок для этого. GDI функции вывода могут использоваться с контекстом устройства памяти только, если точечный рисунок был создан и выбран в тот контекст.
Эта функция может только использоваться, чтобы создать совместимые контексты устройства для операции растра поддержки. Чтобы определять, поддерживает ли контекст устройства, растровые операции, посмотрите RC_BITBLT растровую возможность в функции CDC::GetDeviceCaps.

Пример

// Этот OnDraw ()  загружает точечный рисунок из ресурсов системы,
// Выравнивает по центру это в просмотре, и использует BitBlt()  
// чтобы отрисовать точечный рисунок

void CBlat2View::OnDraw(CDC* pDC)
{
	CBlat2Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// Загрузите IDB_BITMAP1 из наших ресурсов
	CBitmap bmp;
	if (bmp.LoadBitmap(IDB_BITMAP1))
	{
		// Получите размер точечного рисунка
		BITMAP bmpInfo;
		bmp.GetBitmap(&bmpInfo);

		// Создать в оперативной памяти DC совместимый с
		// экранным DC, который мы используем, чтобы рисовать
		CDC dcMemory;
		dcMemory.CreateCompatibleDC(pDC);

		// Выберите точечный рисунок в в оперативной памяти DC
		CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);

		// Найдите центральную точку для 
		// точечного рисунка в клиентской области
		CRect rect;
		GetClientRect(&rect);
		int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
		int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;

		// Копировать биты с в оперативной памяти DC  на -
		// экран DC, чтобы фактически делать рисование. 
		// Используйте центральную точку, чтобы  вычислили смещения.
		pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
			0, 0, SRCCOPY);
		dcMemory.SelectObject(pOldBitmap);
	}
	else
		TRACE0("ERROR: Where's IDB_BITMAP1?\n");
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 27.01.2002