比较完美的实现Areo,也就是win7的毛玻璃.
--------------------编程问答-------------------- using System.Runtime.InteropServices;[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;
} --------------------编程问答--------------------
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)--------------------编程问答-------------------- XP系统下也是这个效果?? 强烈支持!!! 顶起!!! --------------------编程问答-------------------- 可能吗? --------------------编程问答--------------------
{
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);
}
嗯 即使实现 实现起来恐怕也没这么简单。。。 --------------------编程问答-------------------- XP没这API --------------------编程问答-------------------- DWM --------------------编程问答-------------------- 你得到了一个效果,你却失去了XP那么多用户。 --------------------编程问答-------------------- xp肯定是不行的。不过感谢分享。 --------------------编程问答-------------------- 感谢分享。 --------------------编程问答-------------------- 这不就是利用新系统提供的新API调用吗?还以为模拟实现哈.不过还是感谢分享. --------------------编程问答-------------------- 这些api应该受windows版本的限制,某些版本不支持 --------------------编程问答-------------------- 学习学习支持一个。 --------------------编程问答-------------------- Vista或者Win7 --------------------编程问答-------------------- 感谢分享。。不过代码貌似有些不全? --------------------编程问答-------------------- 以前做winform在win7 areo没发现有什么问题啊 --------------------编程问答-------------------- 感谢分享。。不过代码貌似有些不全? --------------------编程问答--------------------
我也没怎么明白,来看看下 --------------------编程问答-------------------- 很好,很实用。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- Vista或者Win7 --------------------编程问答-------------------- 我还以为是LZ自己写算法实现出毛玻璃效果。。。 --------------------编程问答-------------------- 不懂还是不懂! --------------------编程问答-------------------- 感谢分享。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了。。不错 不错。 --------------------编程问答-------------------- 新手学习了。。。。谢谢楼主分享 --------------------编程问答-------------------- 感谢分享,可惜现在国内还是XP的天下。 --------------------编程问答--------------------
long nIndex = GetWindowLongA(hWnd, -20);
这句报异常
“AccessViolationException异常,尝试读取或写人受保护的内存。这通常指示其他内存已损坏。” --------------------编程问答-------------------- 不错,好好学习 --------------------编程问答-------------------- 句柄用IntPtr更好吧,用int的话,64位机不就完了? --------------------编程问答-------------------- --------------------编程问答--------------------
当时没有考虑到,谢谢指教 --------------------编程问答-------------------- 不错啊。辛苦了 --------------------编程问答-------------------- 支持楼主,楼主辛苦了 --------------------编程问答-------------------- 楼主辛苦了…………………… --------------------编程问答-------------------- 变量名还用中文,还是说为了方便大家理解? --------------------编程问答-------------------- xp有什么好的? 那种 安于现状,恐惧革新,接受不了新事物的、人云亦云的、掏2000块钱换新机器的钱不肯花的,老东西。 何必为他们服务?他们肯为你的软件掏一分钱吗?
--------------------编程问答-------------------- 既然可以用,那就用呗。 不于老外合作,用中文不也是挺好的么。 最终编译后出的代码不会受影响的
--------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 看到了 易语言的风格 中文变量 呵呵 --------------------编程问答-------------------- 擦 看到楼上说的 中文变量 我又上去看了下 果然 系统信息 囧rz
不过areo 我用SkinH_Net 解决 嘎嘎 自己写不好用哦..
不知道楼主这个 xp下实验过吗? --------------------编程问答-------------------- 正在用WIN7的来试试了,留名收藏 --------------------编程问答-------------------- --------------------编程问答-------------------- 说的好~! --------------------编程问答-------------------- 上网本 用不了win7 好不 只能xp了 --------------------编程问答-------------------- 支持楼主,楼主辛苦了
不过我都不用的,哈哈 --------------------编程问答-------------------- 看着不错 --------------------编程问答-------------------- 貌似以前在XP下實現過透明的類似win7的透明按鈕,不是areo。 --------------------编程问答-------------------- --------------------编程问答-------------------- win7谢谢!! --------------------编程问答-------------------- --------------------编程问答--------------------
那种透明不带毛玻璃效果的。如果带的话,卡的要命。
做过xp下面的模糊算法。当时比较兴奋,甚至想过自己在xp下面实现个dwm模块。。。但是发现一个是太卡、再一个拿到win7下面反而用不了了(除非你关掉win7自己的毛玻璃效果)。。。想想最终还是放弃了。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢楼主 支持楼主 --------------------编程问答-------------------- XP支持就好了 --------------------编程问答-------------------- 貌似,不懂哦... .... --------------------编程问答-------------------- 支持!
我之前copy过类似代码,那个是把黑色当作透明色了,然后所有黑色字体都没了……从而导致了界面上面没字的悲剧。楼主好像是把粉色当背景色,这个应该很多win32的程序是这样处理透明的…… --------------------编程问答-------------------- w7挺起来!!! --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢楼主分享 --------------------编程问答-------------------- 嗯嗯,这个好 --------------------编程问答-------------------- --------------------编程问答-------------------- 我去弄来看看。 --------------------编程问答--------------------
那些黑色的部分(其实应该是所有的部分)都要带alpha通道的。而老式gdi函数的alpha位都会被填0。结果被dwm当作全透明了。 --------------------编程问答-------------------- 受教了 --------------------编程问答--------------------
楼主,请教下,这个Aero效果怎么实现呢!
http://topic.csdn.net/u/20120425/15/1fa4f801-3647-4162-9992-258272476263.html --------------------编程问答--------------------
等我打完这局游戏 好好研究下 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 这个写的太麻烦,只要封装一个类就可以了。并且,这不是真正意义上的aero,只能是说窗体实现透明四种方式中的一种。可以看到有些控件周边呈现了锯齿效果。真正的aero效果窗体上的每一个label都是用GDI+画上去的,不是拖拖控件那么简单,图片绘制的时候要光滑绘制,这样才不会有锯齿。 --------------------编程问答-------------------- XP下没这API, Win7/Vista下要实现aero还得显示支持. --------------------编程问答-------------------- 不错
string str="good";--------------------编程问答-------------------- --------------------编程问答--------------------
我这个算还好么。。。 其实实现Areo很简单的 一种是使用黑色做底色 全部弄成透明 一种是局部玻璃化效果
但是局部玻璃化效果更好一些 可以不需要黑色做底色 但是需要预先窗口透明 --------------------编程问答-------------------- 你这也算新手....那我算什么...没有手?
补充:.NET技术 , C#