创建一个矩形裁剪区域: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; }