如何制作非矩型对话框

一般来说,对话框都只能设置矩形的,但是可以通过设置对话框的显示区域,来使对话框在界面显示上呈现非矩形的表现形式。非矩形对话框又分两种:

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函数实现其显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值