16,551
社区成员
发帖
与我相关
我的任务
分享我已经弄出来了
Onsize中,以右上角为例:
RECT rect;
CRgn rgnRT;
CRgn rgnWnd;
GetClientRect(rect);
int a1=rect.right - m_szRT.cx,a2=rect.top,a3=rect.right,a4=rect.top+m_szRT.cy;
rgnRT.CreateRectRgn(a1,a2 , a3, a4 );//创建右上角区域
int nOffsetx=rect.right - m_szRT.cx;
m_cRgnRT.OffsetRgn(nOffsetx,0);//将右上角图片区域移动到右上角,XOR
rgnRT.CombineRgn(&rgnRT,m_cRgnRT,RGN_XOR);//裁剪右上角
rgnWnd.CreateRectRgnIndirect(&rect);
rgnWnd.CombineRgn(&rgnWnd,&rgnRT, RGN_XOR);//将裁剪后的右上角合并到主区域,XOR
rgnRT.DeleteObject();
rgnWnd.DeleteObject();
m_cRgnRT.OffsetRgn(-nOffsetx,0);//返回原来的位置
CRect rect, rect2;
CRgn rgn[4];
CRgn rgnWnd;
GetClientRect(rect);
GetWindowRect(rect2);
rect.right = rect.left + rect2.Width();
rect.bottom = rect.top + rect2.Height();
rgn[0].CreateRectRgn(rect.left, rect.top, rect.left + 10, rect.top + 10);
rgn[1].CreateRectRgn(rect.right - 10, rect.top, rect.right, rect.top + 10);
rgn[2].CreateRectRgn(rect.left, rect.bottom - 10, rect.left + 10, rect.bottom);
rgn[3].CreateRectRgn(rect.right - 10, rect.bottom - 10, rect.right, rect.bottom);
rgnWnd.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
rgnWnd.CombineRgn(&rgnWnd, &rgn[0], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[1], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[2], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[3], RGN_XOR);
SetWindowRgn((HRGN)rgnWnd.Detach(), TRUE);