一般来说,对话框都只能设置矩形的,但是可以通过设置对话框的显示区域,来使对话框在界面显示上呈现非矩形的表现形式。非矩形对话框又分两种:
1. 有规则的非矩形,比如四个角处是圆弧,此时可以通过在内存先画出形状,然后得到图形显示区域。示例程序片段:
HRGN rgnArc;
CDC dc;
dc.BeginPath();
//确定左上角圆弧的第一个点
//画左上角圆弧
//画界面图形的左边
//画左下角圆弧
//画界面下边
//画右下角圆弧
//画界面右边线
//画右上角圆弧
dc.EndPath();
//获取区域
rgnArc = ::PathToRegion(dc.m_hDC);
2.无规则的非矩形,必须利用遮罩图片,对图片进行扫描,剔除不想显示的颜色区域,剩下就是想显示的区域。示例程序片段:
//把图中黑色部分去掉
COLORREF col = RGB(0,0,0);
for(int x = 0;x < 100;x++)
{
for(int y = 0;y < 100;y++)
{
if(dcMaskBmp.GetPixel(nMaskWidth-x,nMaskHeight-y) == col)
{
CRgn rgnDec;
rgnDec.CreateRectRgn(rcClient.Width()-x+1,rcClient.Height()-y+1,
rcClient.Width()-x,rcClient.Height()-y);
rgn.CombineRgn(&rgn,&rgnDec,RGN_XOR);
}
}
}
在选区上述任一种方法获取需要显示的区域后,然后利用SetWindowRgn函数实现其显示。