zoukankan      html  css  js  c++  java
  • 使用Layered Window遇到的一些问题及解决方法

    1. 使用Layered Window需要设置 WS_EX_LAYERED 属性

    2.  Layered Window不能作为Child Window

    3. 它也不能包含子窗口,为什么呢,因为它收不到WM_PAINT消息,它上边的子窗口显示不了

    4. 使用DrawText或者Graphics::DrawString,他们画出的字是透明的,

        这个问题我不知道原因,但是解决方法很简单:

        先将文字画到一个内存位图上,然后使用Bitblt的方式将此内存位图拷贝到目标dc即可

    5.  SetWindowRgn 方法失效了!!!

         这个问题同样想不明白,但是解决方法也很简单:

         LayeredWindow有一个性质,透明的部分,鼠标可以穿透,即接收不到鼠标消息

         利用这个特性我们可以很容易制作异形窗口:

          1 // 先保存旧的Clip区域

     2 RECT rcClip = { 0 };
     3 ::GetClipBox(hDC, &rcClip);
     4 HRGN hOldRgn = ::CreateRectRgnIndirect(&rcClip);
     5 
     6 // 先获取需要显示的区域
     7 HRGN rgn = getShowRgn();
     8 
     9 // 选择绘图的区域
    10 ::ExtSelectClipRgn(hDC, rgn, RGN_AND);
    11 
    12 // 好了,开始画图吧,这里只绘制rgn表示的区域,其他没有绘制的区域保持透明,因此可以利用这个特性来制作圆角、箭头等效果
    13 doPaint();
    14 
    15 // 画完之后,恢复Clip区域
    16 ::SelectClipRgn(hDC, hOldRgn);
    17 
    18 // 最后释放rgn
    19 ::DeleteRgn(rgn);
  • 相关阅读:
    TODO supply a title
    three.js ---- 3d页面开发入门
    ProgressBar.Style ---- Marquee
    C#中的Task.Delay()延迟与异步执行返回结果
    位运算-实现加减乘除
    2020年专项附加扣除信息,个税纳税记录查询
    C#动态执行JS和VBS脚本
    windows下bat批处理实现守护进程(有日志)
    C#创建快捷方式的两种方法
    C#中创建程序的快捷方式
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/3816378.html
Copyright © 2011-2022 走看看