裁剪区域

创建一个矩形裁剪区域:CreateRectRgn()

创建一个圆角矩形裁剪区域 

创建一个圆型或椭圆裁剪区域:CreateEllipticRgn()

合并两个裁剪区域:CombineRgn()

设置当前窗口为一个裁剪区域的形状:SetWindowRgn()

绘制指定裁剪区域的边框:FrameRgn()

填充指定的裁剪区域:FillRgn()

以下为设置窗口为圆角矩形的代码和效果:

void CMFCApplication11Dlg::SetWinRgnUser(int nWidthEllipse, int nHeightEllipse)
{
    HRGN hRgn;
    RECT rect;

    GetWindowRect(&rect);
    hRgn = CreateRoundRectRgn(0, 0, rect.right - rect.left, rect.bottom - rect.top, nWidthEllipse, nHeightEllipse);
    SetWindowRgn(hRgn, TRUE);
}

 

以下为设置窗口为椭圆形的代码和效果:

void CMFCApplication11Dlg::SetWinEllipUser()
{
    HRGN hRgn;
    RECT rect;

    GetWindowRect(&rect);
    hRgn = CreateEllipticRgn(rect.left, rect.top, rect.right, rect.bottom);
    SetWindowRgn(hRgn, TRUE);
}

 

下面是一个合并两块矩形区域并填充颜色的代码及效果:

case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: 在此处添加使用 hdc 的任何绘图代码...
            
            //创建两个方形区域。
            HRGN rgnRect1 = CreateRectRgn(10, 10, 100, 100);
            HRGN rgnRect2 = CreateRectRgn(50, 50, 200, 200);
            //合并两个区域。
            CombineRgn(rgnRect1, rgnRect1, rgnRect2, RGN_XOR);
            //创建画刷。
            HBRUSH hbrush = CreateSolidBrush(RGB(255, 0, 0));
            //填充区域。
            FillRgn(hdc, rgnRect1, hbrush);

            //删除画刷.
            DeleteObject(hbrush);

            //删除创建的两个区域.
            DeleteObject(rgnRect1);
            DeleteObject(rgnRect2);

            EndPaint(hWnd, &ps);

            break;
        }

  

原文地址:https://www.cnblogs.com/milanleon/p/7418009.html