fmx 和 vcl 不一样, fmx 的阴影可以通过2D显示出来。 VCL 无标题栏窗口的阴影很麻烦

280425268

我也是用两个窗口做阴影,并重绘了非客户区,不过阴影是基础自TwinControl,没继承TFrom。用spy探测office 2013,发现他也是用了2个句柄window,office 2013阴影也是一个有句柄的window做的,而QQ只用了一个窗口,使用WS_EX_LAYERED风格,阴影和界面全在一个窗口画出来

两个窗口怎么叠加??自己窗口不用的原因是因为,不能影响当前窗口的子控件的绘制??
不是两个窗口叠加,是WS_EX_LAYERED 阴影窗口跟随目标窗口,跟随移动、改变尺寸

在Form的后面再放一个TWinControl?这个TWinControl是怎么显示的?有没有可能会被单独关掉?
用api SetWindowPos显示

fmx不用这么干,fmx和qq的类型一样,可以直接画,因为fmx的控件都是画出来的,用WS_EX_LAYERED不受影响,而vcl用了WS_EX_LAYERED 后所有Twincontrl的wm_paint消息会停止,Twincontrl控件不会再画出来了
Twincontrl 收不到wm_paint,摆在上面的非win控件也不会绘制,所以vcl窗口改成WS_EX_LAYERED风格后,窗口会一片空白,什么控件都不显示
正是因为windows窗口 WS_EX_LAYERED半透明的机制才导致了两种阴影方案,一种是以句柄为基础的的ui框架像vcl,office 需要用用另外一个WS_EX_LAYERED窗口绘制阴影,只用一个WS_EX_LAYERED窗口的话上边的句柄控件显示不出来。 另一种就是fmx,qq这种所有控件都是自己画出来的ui框架,没有WS_EX_LAYERED显示不出句柄控件的烦恼,只用一个WS_EX_LAYERED窗口在这上面做阴影就行

setWindowOpacity()设置透明度的
setAttribute(Qt::WA_TranslucentBackground,true); 设置透明的

官方文档:
https://msdn.microsoft.com/en-us/library/ms997507.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx

搜索“WS_EX_LAYERED”一大堆资料
http://stackoverflow.com/questions/10513716/creating-a-transparent-child-window-on-top-of-non-transparent-parent-window-wi
https://github.com/DmitrySikorsky/StarryNight
http://www.programering.com/a/MzNxkTNwATY.html
https://forum.powerbasic.com/forum/user-to-user-discussions/powerbasic-for-windows/40049-making-a-childwindow-transparent-or-combining-ws_ex_layered-with-ws_child
https://weseetips.wordpress.com/tag/ws_ex_layered/
http://stackoverflow.com/questions/19951379/ws-ex-layered-invisible-window-and-a-fresh-install-of-windows

用了WS_EX_LAYERED 后所有Twincontrl的wm_paint消息会停止(官方Layered Windows文档很多内容)good的更多相关文章

  1. 编写Java程序,在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字“[ 来自新华社 ]”,保存到一个新的 txt 文件内

    查看本章节 查看作业目录 需求说明: 在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字"[ 来自新华社 ]",保存到一个新的 txt 文件内 实现思路: 创建 Sa ...

  2. 窗体的Alpha通道透明色支持(一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息)

    参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768 Windows 2000后,为了支持类似MAC界面的Alpha通道混合效果,提 ...

  3. 产生WM_PAINT 消息

    UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息:RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送WM_PAINT ...

  4. Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)

    使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息. 使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_P ...

  5. WM_PAINT消息小结

    WM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. 1. 系统何时发送WM_PAINT消息? 系统会在多个不同的时机发送WM_PAINT消息:当第 ...

  6. WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式效率高、灵活性强,还有UpdateWindow和RedrawWindow帮忙)

    Q:wm_paint消息在窗口重绘的时候产生,那什么时候窗口会重绘?? A: 严格地说,只有当收到WM_PAINT消息后窗口会重绘 但是引起这个消息的事件有很多, 比如:1.首次创建 2.移动 3.改 ...

  7. 终于懂了:TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处)

    我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedur ...

  8. atlwin中不停发WM_PAINT消息原因分析

    这里我们基于atlwin定义的窗口类SampleWindow继承自CWindowImpl(定义见atlwin.h),并注册了WM_PAINT消息处理函数OnPaint,注意,我们在OnPaint函数中 ...

  9. 06 Windows编程——设备句柄 和 WM_PAINT消息

    windows程序在现实方式上属于图形方式,和文字方式的显示,有显著的不同. 什么是设备句柄,如何获取 使用统一的数据结构表示某一设备,这个结构就是设备句柄. 源码 #include<Windo ...

随机推荐

  1. VS2012经常使用的快捷方式完成最全面

    (1)如何更改设置快捷键 1.转到工具----选项  对话框 2.选  环境---->键盘 3.在 [显示命令包括] 以下的对话框中输入"对齐"keyword,然后就会在这个 ...

  2. Method and system for providing security policy for linux-based security operating system

    A system for providing security policy for a Linux-based security operating system, which includes a ...

  3. 矿Java开发学习之旅------&gt;Java排序算法经典的二分法插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...

  4. C#中的字符串——用Stringbuilder类很重要

    注:这篇文章基本是<C#高级编程>(第七版)第九章的学习笔记. 众所周知,C#中处理字符串通常用的都是string,它其实是.NET基础类System.String类的映射.注意一个是小写 ...

  5. 1 下载abp 以及 遇到的包管理问题

    我选择的是ef 多页面 不适用系统的module zero模块 项目名为Blog_Solution 遇到一个问题是就是  Castle.LoggingFacility.MsLogging 版本问题 我 ...

  6. 卷积神经网络(CNN)的理解与总结

    卷积神经网络模型的历史演化: 0. 核心思想 two main ideas: use only local features 在不同位置上使用同样的特征: 池化层的涵义在于,更高的层次能捕捉图像中更大 ...

  7. python3实现万年历(包括公历、农历、节气、节日)

    #!/usr/local/bin/python3 # coding=utf-8 # Created: 20/07/2012 # Copyright: http://www.cnblogs.com/tx ...

  8. Oltu在Jersey框架上实现oauth2.0授权模块

    oltu是一个开源的oauth2.0协议的实现,本人在此开源项目的基础上进行修改,实现一个自定义的oauth2.0模块. 关于oltu的使用大家可以看这里:http://oltu.apache.org ...

  9. 用游戏杆控制WPF中三维模型

    原文:用游戏杆控制WPF中三维模型 用游戏杆控制WPF中三维模型   今天心情比较好,不写WF的文章了,换个主题.写一个我最最最擅长的内容.   例子下载: http://files.cnblogs. ...

  10. C类型和存储方式的语言变量

    变量的作用域:有效射程变量 >局部变量 1.在函数中的局部变量,量在该函数结束后自己主动撤销 2.函数内的复合语句中的局部变量(比方for语句),这个变量在复合语句结束后自己主动撤销.这个变量能 ...