关于窗口嵌入桌面及透明的注意事项
来源:互联网 发布:iphone软件分类 编辑:程序博客网 时间:2024/04/29 19:34
这几天在做个东东,需要将窗体嵌入桌面及窗口透明
开始我以为以我现在的所知应该没什么大问题,结果也的确如此,没什么大问题,只是细节上出了几个小问题...
1. 关于嵌入桌面
原理很简单,找到 Progman 并将窗口 SetParent 过去即可
(当然也可以嵌入到 Progman 的子窗口以保证窗口不覆盖桌面的图标,不过我的要求是我的窗口必须覆盖桌面图标,呵呵)
但是问题来了,我发现我的窗口在桌面上F5或者Win+D的时候会隐藏,尝试拦截 WM_SYSCOMMAND/SC_MINIMIZED消息无效
但是其他嵌入桌面的程序则没有此问题
查看了一下Window Style,发现我的窗口的 Ex Style 多了一个 WS_EX_APPWINDOW 属性(因为是主窗口)
但是我的主窗口此属性去不掉,因此 New 了一个 Form 动态创建后 OK
代码(就一句...)
2. 关于透明
第一个想到的是 Layered Window
需要注意的是窗口样式 ExStyle 必须包含 WS_EX_LAYERED(0x80000),而且在 CreateParams 里指定无效...
然后使用 SetLayeredWindowAttributes 设置透明度,关于这个函数网上有很多问题,这里不在赘述
执行时我发现我的窗口并没有被透明,SetLayeredWindowAttributes 返回 False
于是我估计还是跟窗体的 Style 有关系(因为我的窗口 BorderStyle=bsNone)
果然,在 CreateParams 里给窗体加上 WS_POPUP 后透明成功~鼓掌~~
不过这样窗口虽然透明了可是窗体里控件也跟着透明了...
跟着就想到 WS_EX_TRANSPARENT 样式,加上后窗体透明,但是控件不透明了
不过这个样式下当桌面被刷新的时候窗口得不到及时通知,因此显示会有点问题
正在尝试 MsgHook...(待续)
先贴个代码吧
2begin
3 inherited;
4 with Params do Style := Style or WS_POPUP;
5end;
6
7procedure TSubForm.FormCreate(Sender: TObject);
8begin
9 UpdateStyle;
10end;
11
12procedure TSubForm.UpdateStyle;
13begin
14 SetWindowLong(Handle, GWL_EXSTYLE,
15 GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
16 if Assigned(SetLayeredWindowAttributes) then
17 SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA);
18end;
19
// D7以上直接使用 Form 的 AlphaBlend/AlphaBlendValue 或者 TransparentColor/TransparentColorVale 即可实现透明
// 其实最终还是用 SetLayeredWindowAttributes 实现的
2begin
3 inherited;
4 with Params do ExStyle := ExStyle or WS_EX_TRANSPARENT;
5end;
- 关于窗口嵌入桌面及透明的注意事项
- 关于窗口嵌入桌面显示(桌面提示)
- Qt实现嵌入桌面的半透明窗口
- 将窗口嵌入桌面
- 将窗口嵌入桌面
- 关于窗体透明的注意事项
- 如何让你的WinForm嵌入桌面窗口最底层
- 桌面透明窗口程序渲染
- 关于模式窗口的注意事项
- 关于透明窗口的一些收集
- 关于透明窗口制造假象的精髓
- 关于主对话框窗口嵌入子对话框窗口的说明
- Qt实现半透明窗口 嵌入桌面
- 关于透明桌面相框图片不能显示的问题
- Qt实现嵌入桌面的半透明窗口 [此博文包含图片]
- 始终拉伸填满窗口的背景及层的透明
- 关于截屏截取不到透明窗口的问题
- 关于分层窗口文字输出透明的处理方法
- 转:十大愚蠢事
- 包装本机类以供 C# 使用
- 在 .NET 框架程序中通过DllImport使用 Win32 API
- 设计文章列表
- 数据库缓存技术在web上的应用以及出现错误的解决方法
- 关于窗口嵌入桌面及透明的注意事项
- 转:用Javascript来关闭IE浏览器和FireFox浏览器
- 页面数据传递
- java中操作xml几种方式的比较和代码示例(DOM,SAX,JDOM,DOM4J)
- 精妙SQL语句
- ---string转stream-
- 我的
- windows控制台字体颜色的编程
- 程序员面试要点