Показать сообщение отдельно
Старый 22.09.2004, 12:37     # 5
EjikVTumane
Member
 
Аватар для EjikVTumane
 
Регистрация: 18.04.2002
Адрес: Ф туманах Новосибирска...
Сообщения: 378

EjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собой
Смотри, переносим код в обработку WM_ERASEBKGND (это к вопросу о том, что обновление не происходит):
Код:
case WM_ERASEBKGND:
{
	GetWindowRect(hWnd, &windowRect);
	UpdateMainFrame(windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);
	frameRegion = BitmapToRegion(MainFrame, RGB(255, 0, 255));
	SetWindowRgn(hWnd, frameRegion, FALSE);
	HBRUSH brush;
	brush = CreatePatternBrush(MainFrame);
	FillRgn(hdc, frameRegion, brush);
	DeleteObject(brush);
	return 0;
}
BITMAP тоже чистится каждый раз перед созданием:
Код:
void UpdateMainFrame(int width, int height)
{
	HDC MainFrameDC;

	if(MainFrame != NULL)
		DeleteObject(MainFrame);
	MainFrame = CreateBitmap(width, height, 1, 32, NULL);
	MainFrameDC = CreateCompatibleDC(NULL);
	SelectObject(MainFrameDC, MainFrame);

	//собираем BITMAP из кусочков
	BitBlt(MainFrameDC, 0, 0, bitmap11info.bmWidth, bitmap11info.bmHeight, bitmap11hdc, 0, 0, SRCCOPY);
	StretchBlt(MainFrameDC, bitmap11info.bmWidth, 0, width-bitmap13info.bmWidth-bitmap11info.bmWidth, bitmap12info.bmHeight,
		bitmap12hdc, 0, 0, bitmap12info.bmWidth, bitmap12info.bmHeight, SRCCOPY);
	BitBlt(MainFrameDC, width-bitmap13info.bmWidth, 0, bitmap13info.bmWidth, bitmap13info.bmHeight, bitmap13hdc, 0, 0, SRCCOPY);

	StretchBlt(MainFrameDC, 0, bitmap11info.bmHeight, bitmap21info.bmWidth, height-bitmap11info.bmHeight-bitmap31info.bmHeight,
		bitmap21hdc, 0, 0, bitmap21info.bmWidth, bitmap21info.bmHeight, SRCCOPY);
	StretchBlt(MainFrameDC, bitmap21info.bmWidth, bitmap11info.bmHeight, width-bitmap23info.bmWidth-bitmap21info.bmWidth, height-bitmap12info.bmHeight-bitmap32info.bmHeight,
		bitmap22hdc, 0, 0, bitmap22info.bmWidth, bitmap22info.bmHeight, SRCCOPY);
	StretchBlt(MainFrameDC, width-bitmap23info.bmWidth, bitmap11info.bmHeight, bitmap23info.bmWidth, height-bitmap11info.bmHeight-bitmap31info.bmHeight,
		bitmap23hdc, 0, 0, bitmap23info.bmWidth, bitmap23info.bmHeight, SRCCOPY);


	BitBlt(MainFrameDC, 0, height-bitmap31info.bmHeight, bitmap31info.bmWidth, bitmap31info.bmHeight, bitmap31hdc, 0, 0, SRCCOPY);
	StretchBlt(MainFrameDC, bitmap31info.bmWidth, height-bitmap32info.bmHeight, width-bitmap33info.bmWidth-bitmap31info.bmWidth, bitmap32info.bmHeight,
		bitmap32hdc, 0, 0, bitmap32info.bmWidth, bitmap32info.bmHeight, SRCCOPY);
	BitBlt(MainFrameDC, width-bitmap33info.bmWidth, height-bitmap33info.bmHeight, bitmap33info.bmWidth, bitmap33info.bmHeight, bitmap33hdc, 0, 0, SRCCOPY);

	DeleteDC(MainFrameDC);
	GetObject(MainFrame, sizeof(MainFrameInfo), &MainFrameInfo);
}
Получаем - при каждой перерисовке устанавливаем окну новый регион, и заполняем его кистью, созданной на основе BITAMP'а. И ежу понятно , что запихивать этот код в обработку WM_ERASEBKGND - это гнусно и ОЧЕНЬ не практично (но для иллюстрации потянет).

Далее смотрим MSDN :
The SetWindowRgn function sets the window region of a window. The window region determines the area within the window where the system permits drawing. The system does not display any portion of a window that lies outside of the window region.

Иными словами говоря - не должно изображение за регион выходить.

А что получается смотри во вложении.
Изображения
Тип файла: gif resize.gif (4.2 Кбайт, 11 просмотров - Кто скачивал? )
EjikVTumane вне форума