Статья: Работа с регионами в Visual C++
}
Естевственно, что это сообщение посылается только когда окно в режиме скина.
Скачать исходник - 52Кб
Сложные регионы
Простые геометрические фигурки это конечно хорошо. А что делать, если надо создать регион сложной формы, например в виде руки:
Чтобы проделать подобное, нам прийдётся наваять небольшую функцию, которая будет сканировать битмап и создавать из него попиксельно регион с прозрачностью. Далее такой регион будет достаточно прицепить к окну.
// ----------------------------------------------------------------------
// Функция сканирует битмап и возвращает необходимый нам регион.
// Освободить объект региона нужно будет самостоятельно...
// ----------------------------------------------------------------------
HRGN ScanRegion(HBITMAP pBitmap, BYTE jTranspR, BYTE jTranspG, BYTE jTranspB)
{
// ширинаивысотабитмапа
WORD wBmpWidth,wBmpHeight;
// конечный и временный регионы
HRGN hRgn, hTmpRgn;
// 24-битные пиксели из битмапа
BYTE *pPixels = Get24BitPixels(pBitmap, &wBmpWidth, &wBmpHeight);
if (!pPixels) return NULL;
// создаёмрабочийрегион
hRgn = CreateRectRgn(0,0,wBmpWidth,wBmpHeight);
if (!hRgn) { delete pPixels; return NULL; }
// ---------------------------------------------------------
// сканируембитмап
// ---------------------------------------------------------
DWORD p=0;
for (WORD y=0; y<wBmpHeight; y++)
{