通常情况下,窗口都是一个矩形,不过,调用下面这个函数,可以自定义窗口的形状。
int SetWindowRgn(
__in HWND hWnd,
__in HRGN hRgn,
__in BOOL bRedraw
);
第一个参数是窗口的句柄,第二个参数也是一个句柄——HRGN,一个多边形的区域,可以用CreatePolygonRgn函数来创建。第三个参数指定函数调用成功后是否重画窗口,如果窗口还没有显示,就不必了,如果窗口已经显示,可以考虑设为TRUE。
我们创建用于显示窗口形状的区域句柄HRGN可以不显示用DeleteObject函数删除,因为MSDN上面有这么一句话:In particular, do not delete this region handle. The system deletes the region handle when it no longer needed.
OK,理论知识准备好了,下面就趁温暖打铁,实战一下吧。
接下来我们要做出这个模样的窗口。
由于这个形状是固定的,只需要设置一次即可,所以,我不打算在处理WM_PAINT消息的时候来设置多边形区域,改为在CreateWindow成功后就设置,设置之后再ShowWindow。