combineRgn也需要用到啊int CombineRgn( HRGN hrgnDest, // handle to destination region HRGN hrgnSrc1, // handle to source region HRGN hrgnSrc2, // handle to source region int fnCombineMode // region combining mode );这样用: 首先定义三个区域 hRgn,hRgn1,hRgn2 再CombineRgn(hRgn,hRgn1,hRgn2,4) 就是将hRgn2从hRgn1中去掉 再定义窗体的形状: int SetWindowRgn( HWND hWnd, // handle to window HRGN hRgn, // handle to region BOOL bRedraw // window redraw option );知道怎么用了?
给点分吧,我都一个多月没得分了。
HRGN hrgnDest, // handle to destination region
HRGN hrgnSrc1, // handle to source region
HRGN hrgnSrc2, // handle to source region
int fnCombineMode // region combining mode
);这样用:
首先定义三个区域
hRgn,hRgn1,hRgn2
再CombineRgn(hRgn,hRgn1,hRgn2,4)
就是将hRgn2从hRgn1中去掉
再定义窗体的形状:
int SetWindowRgn(
HWND hWnd, // handle to window
HRGN hRgn, // handle to region
BOOL bRedraw // window redraw option
);知道怎么用了?
CRect rcWnd,rcUnused;
GetWindowRect(&rcWnd);
rcUnused.SetRect(....);//要抠掉的矩形CRgn rgnWnd,rgnUnused;
rgnWnd.SetRectRgn(&rcWnd);
rgnUnused.SetRectRgn(&rcUnused);
rgnWnd.CombineRgn(&rgnWnd,&rgnUnused,RGN_XOR);
SetWindowRgn((HRGN)rgnWnd.GetSafeHandle(),TRUE);具体你可以再修改
我修改了一下,可以镂空了!不过在MDI窗体中必须GetWindowRect(&rect)得到的屏幕坐标转换为客户区坐标才可以有正确的显示哦!不知道怎么回事?而在dialog中却转不转换都无所谓!可是用过SetWindowRgn()后,窗体最大化或者放缩,却不能正常显示了,怎么回事?得重载什么函数不是???
SC_MAXIMIZE 和 SC_RESTORE 的处理