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 = {  };
 3 ::GetClipBox(hDC, &rcClip);
 4 HRGN hOldRgn = ::CreateRectRgnIndirect(&rcClip);
 5 
 6 // 先获取需要显示的区域
 7 HRGN rgn = getShowRgn();
 8 
 9 // 选择绘图的区域
 ::ExtSelectClipRgn(hDC, rgn, RGN_AND);
 
 // 好了,开始画图吧,这里只绘制rgn表示的区域,其他没有绘制的区域保持透明,因此可以利用这个特性来制作圆角、箭头等效果
 doPaint();
 
 // 画完之后,恢复Clip区域
 ::SelectClipRgn(hDC, hOldRgn);
 
 // 最后释放rgn
 ::DeleteRgn(rgn);

使用Layered Window遇到的一些问题及解决方法的更多相关文章

  1. window.onresize 多次触发的解决方法

    用了window.onresize但是发现每次 onresize 后页面中状态总是不对,下面与大家分享下onresize 事件多次触发的解决方法. 之前做一个扩展,需要在改变窗口大小的时候保证页面显示 ...

  2. js实现window.open不被拦截的解决方法汇总

    一.问题: 今天在处理页面ajax请求过程中,想实现请求后打开新页面,就想到通过 js window.open 来实现,但是最终都被浏览器拦截了. 二.分析: 在谷歌搜索有没有解决方法,有些说可以通过 ...

  3. nuxtjs在vue组件中使用window对象编译报错的解决方法

    我们知道nuxtjs是做服务端渲染的,他有很多声明周期是运行在服务端的,以及正常的vue声明周期mounted之前均是在服务端运行的,那么服务端是没有比如window对象的location.navag ...

  4. node.js中模块报错【window is not defined】的解决方法

    (function(window) { /* Keep source code the same */ // })(typeof window == "undefined" ? g ...

  5. Window下Qt Creator启动错误解决方法

    很多电脑现在都是用的是双显卡,高性能的独显和性能比较差但耗电少的集显,在Window10系统下右键点击软件,在"图形处理器"里面可以选择使用什么显卡操作此软件.下面是我在运行Qt ...

  6. Window下,Jenkins忘记密码解决方法

    没有修改过密码的情况下找回初始密码(或者第一次部署的时候) 进入目录 D:\jenkins\secrets ,找到文件 initialAdminPassword 在jenkins页面,输入登录名adm ...

  7. 【转载】Layered Window(分层窗体,透明窗体)

    本文转载自花间醉卧<Layered Window(分层窗体,透明窗体)> //为窗体添加WS_EX_LAYERED属性,该属性使窗体支持透明 ModifyStyleEx(0, WS_EX_ ...

  8. safari 浏览器window.history.go(-1)运行无效解决办法

    这几天做了几个手机端app的wap页面,做完之后发现一个问题,那就是ios系统下的safari浏览器不支持window.history.go(-1)..无语... 解决方法很简单!加上return f ...

  9. ajax请求成功后打开新开窗口(window.open())被拦截的解决方法

    问题:今天在做项目时需要在ajax请求成功后打开一个新的窗口,此时遇到浏览拦截了新窗口的问题,尝试在ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('clic ...

随机推荐

  1. Unity3D开发之Matrix4x4矩阵变换

    在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置.旋转和缩放.但是很多人都不太理解这儿Matrix4x4变换矩阵.通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么 ...

  2. Amazon 发送个人文档无回复

    Amazon 个人文档问题 注意注意 详情见:[使用您的[发送至Kindle]电子邮箱] 重点提示 在电子邮件主题中输入"Convert"以将您的文档转换为Kindle格式,然后再 ...

  3. ehchache和redis

    Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apa ...

  4. 【spring源码学习】spring的IOC容器之BeanFactoryPostProcessor接口学习

    [一]org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>该接口实现方法的执行时机:该接口void pos ...

  5. LG3648 [APIO2014]序列分割

    题意 你正在玩一个关于长度为 \(n\) 的非负整数序列的游戏.这个游戏中你需要把序列分成 \(k+1\) 个非空的块.为了得到 \(k+1\) 块,你需要重复下面的操作 \(k\) 次: 选择一个有 ...

  6. 在Toad中导入导出数据

    一.导出数据 右键点击所要导出的表名,选择“Export   Date”     二.导入数据   一.右键点击表名,选择“import  date” 二.下一步 三.下一步 四.下一步 在oracl ...

  7. Python学习笔记之os模块

    Python中的os提供了非常丰富的方法用来处理文件和目录,下面我们将详细的介绍os相关的一些方法和函数: os 路径相关的函数: 1.os.listdir(dirname):列出dirname目录下 ...

  8. GOF23设计模式之单例模式(singleton)

    一.单例模式概述 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点. 由于单例模式只生成一个实例,减少了系统性能开销.所以当一个对象的产生需要比较多的资源时,如读取配置.产生其他依赖对象时, ...

  9. webservice有关application/xop+xml的异常

    今天同事调用一个webservice时返回类似错误 响应消息的内容类型 multipart/related; type="application/xop+xml"; boundar ...

  10. Annotation之三:自定义注解示例,利用反射进行解析

    @Retention定义了该Annotation被保留的时间长短有3中RetentionPolicy.SOURCE源文件有效,RetentionPolicy.CLASS:在class文件中有效,Ret ...