比较完美的实现Areo,也就是win7的毛玻璃.

lovestarbao 2012-04-30 12:17:27
加精
大家有研究过areo的就知道,开启areo后,控件就会消失 或者看不到标题,其实解决方法很简单,大家看看就知道了.代码没有任何技术含量...

嗯,先上个效果图



嗯嗯,再容许我废话两句...

我刚刚接触C#,基本就是两眼什么看不到的瞎撞,基础一塌糊涂,这个等下你们看下我写的代码就知道.

写这个毛玻璃也是,百度+MSDN 挠破头皮写出来的.

作为一个新手,我想说,有时候真的需要你们的帮助,可能你们一句话,就可以让我们少走许多弯路.

..就拿我来说吧,当时声明DLL的不知道如何设置传值型参数,百度谷歌都上了,代码倒是挺多(看不懂),理论一大篇一大篇,但是我只是想知道如何传值呀,看完都没找到我想要的.

还是最后一个朋友告诉我的,传值型的加个ref就可以了嘛.

..吐槽完毕,再说什么就矫情了,开始贴代码

晕 还有连续3次回复限制, 新手第一次发帖不知道 直接贴在这里吧

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Areo测试
{
public partial class window : Form
{
public window()
{
InitializeComponent();
}
[DllImport("kernel32")]
static extern int GetVersionExA(ref OSVERSIONINFO 系统信息);
[DllImport("user32")]
static extern long GetWindowLongA(int hWnd, int nIndex);
[DllImport("user32")]
static extern int SetWindowLongA(int hWnd, int nIndex, long dwNewLong);
[DllImport("user32")]
static extern int SetLayeredWindowAttributes(int hWnd, int cr, int alp, int index);
[DllImport("dwmapi")]
static extern int DwmIsCompositionEnabled(ref int pfEnabled);
[DllImport("dwmapi")]
static extern int DwmEnableComposition(int uCompositionAction);
[DllImport("dwmapi")]
static extern int DwmExtendFrameIntoClientArea(int hWnd, ref _MARGINS pMarInset);
[DllImport("dwmapi")]
static extern int DwmEnableBlurBehindWindow(int hWnd, ref _DWM_BLURBEHIND pBlurBehind);

int hWnd = new int();//定义程序集变量

public struct OSVERSIONINFO
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
}
public struct _MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}
public struct _DWM_BLURBEHIND
{
public int dwFlags;
public int fEnable;
public int hRgnBlur;
public int fTransitionOnMaximized;
}
private void Form1_Load(object sender, EventArgs e)
{
hWnd = Handle.ToInt32();

//判断系统版本,6和6以上版本可以使用
OSVERSIONINFO 版本信息 = new OSVERSIONINFO();
版本信息.dwOSVersionInfoSize = 148;
GetVersionExA(ref 版本信息);
if (版本信息.dwMajorVersion < 6)
{
MessageBox.Show("当前系统版本无法使用Areo!");
DestroyHandle();
}

long nIndex = GetWindowLongA(hWnd, -20);
nIndex = nIndex | 524288;
SetWindowLongA(hWnd, -20, nIndex);
SetLayeredWindowAttributes(hWnd, 16711680, 255, 1);
}

private void button1_Click(object sender, EventArgs e)
{
int pfEnabled = new int();
DwmIsCompositionEnabled(ref pfEnabled);
if (pfEnabled == 1)
{
MessageBox.Show("该系统开启了Areo效果");
}
else
{
MessageBox.Show("该系统没有开启Areo效果");
}
}

private void button2_Click(object sender, EventArgs e)
{
DwmEnableComposition(0);
MessageBox.Show("已经在当前进程关闭Aero 退出进程后界面会自动恢复");
}

private void button3_Click(object sender, EventArgs e)
{
DwmEnableComposition(1);
MessageBox.Show("已经在当前进程开启Aero 退出进程后界面会自动恢复");
}

private void button4_Click(object sender, EventArgs e)
{


this.BackColor = ColorTranslator.FromWin32(16711680);
checkedListBox1.BackColor = ColorTranslator.FromWin32(16711680);
progressBar1.BackColor = ColorTranslator.FromWin32(16711680);
textBox1.BackColor = ColorTranslator.FromWin32(16711680);
tabPage1.BackColor = ColorTranslator.FromWin32(16711680);
tabPage2.BackColor = ColorTranslator.FromWin32(16711680);
tabPage1.ForeColor = ColorTranslator.FromWin32(16711680);
tabPage2.ForeColor = ColorTranslator.FromWin32(16711680);
_MARGINS sRT = new _MARGINS();
sRT.cxLeftWidth = -1;
DwmExtendFrameIntoClientArea(hWnd, ref sRT);
}
}
}

...全文
6073 80 打赏 收藏 转发到动态 举报
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
janewesion 2012-09-05
  • 打赏
  • 举报
回复
不错
string str="good";
Cielleech 2012-09-05
  • 打赏
  • 举报
回复
XP下没这API, Win7/Vista下要实现aero还得显示支持.
lyandy007 2012-09-05
  • 打赏
  • 举报
回复
这个写的太麻烦,只要封装一个类就可以了。并且,这不是真正意义上的aero,只能是说窗体实现透明四种方式中的一种。可以看到有些控件周边呈现了锯齿效果。真正的aero效果窗体上的每一个label都是用GDI+画上去的,不是拖拖控件那么简单,图片绘制的时候要光滑绘制,这样才不会有锯齿。
CrazyCode1981 2012-09-05
  • 打赏
  • 举报
回复
你这也算新手....那我算什么...没有手?
Yun__ 2012-09-05
  • 打赏
  • 举报
回复

我这个算还好么。。。 其实实现Areo很简单的 一种是使用黑色做底色 全部弄成透明 一种是局部玻璃化效果
但是局部玻璃化效果更好一些 可以不需要黑色做底色 但是需要预先窗口透明
lovestarbao 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 的回复:]
引用楼主 的回复:
大家有研究过areo的就知道,开启areo后,控件就会消失 或者看不到标题,其实解决方法很简单,大家看看就知道了.代码没有任何技术含量...

嗯,先上个效果图



嗯嗯,再容许我废话两句...

我刚刚接触C#,基本就是两眼什么看不到的瞎撞,基础一塌糊涂,这个等下你们看下我写的代码就知道.

写这个毛玻璃也是,百度+MSDN 挠破头皮写出来的.

……
[/Quote]

等我打完这局游戏 好好研究下
几只蝉 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
大家有研究过areo的就知道,开启areo后,控件就会消失 或者看不到标题,其实解决方法很简单,大家看看就知道了.代码没有任何技术含量...

嗯,先上个效果图



嗯嗯,再容许我废话两句...

我刚刚接触C#,基本就是两眼什么看不到的瞎撞,基础一塌糊涂,这个等下你们看下我写的代码就知道.

写这个毛玻璃也是,百度+MSDN 挠破头皮写出来的.

作为一个新手,我想说,……
[/Quote]
楼主,请教下,这个Aero效果怎么实现呢!
http://topic.csdn.net/u/20120425/15/1fa4f801-3647-4162-9992-258272476263.html
人生需要拼搏 2012-05-07
  • 打赏
  • 举报
回复
我去弄来看看。
passionnow2 2012-05-07
  • 打赏
  • 举报
回复
受教了
unituniverse2 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 的回复:]

支持!
我之前copy过类似代码,那个是把黑色当作透明色了,然后所有黑色字体都没了……从而导致了界面上面没字的悲剧。楼主好像是把粉色当背景色,这个应该很多win32的程序是这样处理透明的……
[/Quote]
那些黑色的部分(其实应该是所有的部分)都要带alpha通道的。而老式gdi函数的alpha位都会被填0。结果被dwm当作全透明了。
gongfudi50 2012-05-06
  • 打赏
  • 举报
回复
嗯嗯,这个好
DOSSTONED 2012-05-06
  • 打赏
  • 举报
回复
支持!
我之前copy过类似代码,那个是把黑色当作透明色了,然后所有黑色字体都没了……从而导致了界面上面没字的悲剧。楼主好像是把粉色当背景色,这个应该很多win32的程序是这样处理透明的……
wangsong145 2012-05-06
  • 打赏
  • 举报
回复
感谢楼主分享
D1026946613 2012-05-06
  • 打赏
  • 举报
回复
w7挺起来!!!
unituniverse2 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 的回复:]
貌似以前在XP下實現過透明的類似win7的透明按鈕,不是areo。
[/Quote]
那种透明不带毛玻璃效果的。如果带的话,卡的要命。
做过xp下面的模糊算法。当时比较兴奋,甚至想过自己在xp下面实现个dwm模块。。。但是发现一个是太卡、再一个拿到win7下面反而用不了了(除非你关掉win7自己的毛玻璃效果)。。。想想最终还是放弃了。。。
lib90 2012-05-05
  • 打赏
  • 举报
回复
感谢楼主 支持楼主
Ruyisuixing 2012-05-05
  • 打赏
  • 举报
回复
貌似,不懂哦... ....
qq1938663834 2012-05-05
  • 打赏
  • 举报
回复
XP支持就好了
Code従業員 2012-05-04
  • 打赏
  • 举报
回复
正在用WIN7的来试试了,留名收藏
and_015 2012-05-04
  • 打赏
  • 举报
回复
win7谢谢!!
加载更多回复(45)
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧