作为一个人,我们都是具有审美观点的,爱美之心人皆有之,如何是自己做出的程序更美,更漂亮,是每个程序员的心愿,每天看到的都是方方块块的矩形窗口,是不是很腻,很呆板。今天偶然想到怎么自定义界面形状的问题。然后就开搜索相关的知识,本来以为很难的东西,不过看过之后也没有那么难了。
我们可以想想每个程序都关连一个区域,这个区域决定将来程序的显示区域,超出区域之外的东西都不属于这个程序了。由此引出了一个函数:
int SetWindowRgn( HRGN hRgn, BOOL bRedraw );
这个函数就是设置窗口的区域,将来的Dc也就是在这个东西上面画东西。不过通过GetClientRect获取的区域和这个区域并不是等同的,GetClientRect获取的是一个矩形,包含这个区域的矩形。
有了设置区域的函数,就需要有个区域哇,HRGNi就是与区域关联的句柄,有了句柄就可以干自己相干的事。可是怎么创建区域句柄呢?这就涉及到一个类:CRgn这个类封装了对区域操作。可以用里面的Create***函数创建所想要的区域......
下面贴一段代码帮忙理解:
//m_rgnWnd一个CRng类,与窗口的作用域相同.
m_rgnWnd.CreateEllipticRgn(0, 0, 111, 111);
// 将m_rgnWnd设置为窗口区域
SetWindowRgn((HRGN)m_rgnWnd, false);
CRect rect;
GetClientRect(&rect);