一般來說,對話框都只能設置矩形的,但是可以通過設置對話框的顯示區域,來使對話框在界面顯示上呈現非矩形的表現形式。非矩形對話框又分兩種:
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函數實現其顯示。