windows如何实现圆角窗口

背景

windows做绘制时,为了美观,常常将一些图片或者窗口的四个角做成圆角。例如QQ窗口:

圆角的实现方案总结

  • 其实总结起来非常的简单,就两个步骤:
  1. 计算窗口的边界剪切域
  2. 通过windows API SetWindowRgn设置该窗口的剪切域
  • 其实原理就是,设置好边界剪切域之后,windows会将边界剪切域中的像素都去掉。

步骤详解

1. 计算窗口的边界剪切域

  • MFC中可利用CRgn
  • 使用CreateRectRgn创建边界剪切域
    • 可用CreateRoundRectRgn创建圆角矩形区域
    • CreateEllipticRgn创建椭圆形剪切域
    • CreatePolygonRgn创建多边形剪切域
  • 使用CombineRgn来修改边界剪切域,常用的位操作如下:
    • RGN_AND
    • RGN_OR
    • RGN_XOR
    • RGN_DIFF
    • RGN_COPY

2. 设置窗口的边界剪切域

  • 使用SetWindowRgnAPI设置窗口的剪切域

    • 需传入参数:边界剪切域的句柄HRGN
    • 需传入参数:是否触发重绘
  • 上述两步骤,可以简单的理解为:

    1. 给windows窗口设置要被“剪掉”的区域
    2. 以后windows系统域每次重绘的时候,都会把这部分区域“剪掉”,这样就实现了圆角或者其他丰富形状的窗口

参考连接

posted @ 2019-09-16 23:51  HelloWooo  阅读(7271)  评论(0编辑  收藏  举报