如何製作非矩型對話框

一般來說,對話框都只能設置矩形的,但是可以通過設置對話框的顯示區域,來使對話框在界面顯示上呈現非矩形的表現形式。非矩形對話框又分兩種:

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函數實現其顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章