Для получения окна произвольной формы с изменяемым размером обрабатываю WM_SIZE, но при уменьшении размера окна за правой и нижней границей тянется шлейф. Причем только за частями границы, которые отличаются от исходного прямоугольного региона (например за скругленными углами окна).
Самое забавное - есть замечательный пример написанный на MFC
http://www.rsdn.ru/article/files/Classes/skindlg.xml и все прекрасно работает. А на WinAPI не получается
Как можно решить данную проблему?
Код:
case WM_SIZE:
{
RECT clientRect, wndRect;
GetClientRect(hWnd, &clientRect);
UpdateMainFrame(((int)(short)LOWORD(lParam)), ((int)(short)HIWORD(lParam)));
WindowRgn = BitmapToRegion(MainFrame, RGB(255, 0, 255));
SetWindowRgn(hWnd, WindowRgn, FALSE);
hdc = GetDC(hWnd);
HDC MainFrameDC;
MainFrameDC = CreateCompatibleDC(NULL);
SelectObject(MainFrameDC, MainFrame);
BitBlt(hdc, 0, 0, clientRect.right, clientRect.bottom, MainFrameDC, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hdc);
DeleteDC(MainFrameDC);
return 0;
}
Пара пояснений к коду:
UpdateMainFrame - создается BITMAP
BitmapToRegion - создается регион на основе BITMAP'а