技术
`
2009/2/24 10:54
MFC对话框简单实现窗口全透明的方法
0
0

Vista系统中利用dwapi.dll实现窗体全透明的方法,在网上更多的资源是基于WTL或是C#,借此发布一下基本MFC对话框实现此此功能的最简单的方法。
本方法只是实现整个程序的窗口界面(包括客户区)呈现半透明的效果,因此很简单。编译及运行需要 Windows Vista 或者 Windows Server 2008 系统的支持并且需要开启透明功能才能显示其效果。效果图改日回家附上。

因为实现方法未包含系统检测,未作其它系统(即XP、200、98)的处理方式,在这些系统中运行会报错。

实现方法:

1、创建工程,打开Visual Studio 2005 或者 Visual Studio 2008 创建基本MFC的对话框程序,在例子中我采用的工程名是VcAeroGlass。

2、在stdafx.h中添加利用dwapi.dll的声明
//stdafx.h
#include <dwmapi.h>
#pragma comment(lib,"dwmapi")

3、在对话框实现文件VcAeroGlassDlg.cpp的初始函数OnInitDialog()中作如下添加:
BOOL CVcAeroGlassDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//............................
//系统自动成,省略

MARGINS mar;
mar.cxLeftWidth = -1;
mar.cxRightWidth = -1;
mar.cyTopHeight = -1;
mar.cyBottomHeight =-1;

CRect rectClient;
GetClientRect (rectClient);
mar.cyTopHeight = rectClient.Height ();
DwmExtendFrameIntoClientArea (CDialog::GetSafeHwnd(),&mar );
return TRUE;
}

4、在实现文件的绘制函数OnPaint()中作如下添加:
void CVcAeroGlassDlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
CRect rcGlassArea;
GetClientRect ( &rcGlassArea );
dc.FillSolidRect ( &rcGlassArea, RGB(0,0,0) );
//............................
//系统自动成,省略
}

5、编译运行程序即可看到效果。

源码以上传:

For VC2005: http://download.csdn.net/source/710225

For VC2008SP1: http://download.csdn.net/source/710216

发布:薛雪 E_mail:SnowEmail3074@163.com
 

 

免责声明:本文仅代表作者个人观点,与C114通信网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

给作者点赞
0 VS 0
写得不太好

C114简介     联系我们     网站地图

Copyright©1999-2025 c114 All Rights Reserved 沪ICP备12002291号-4

C114通信网版权所有 举报电话:021-54451141 用户注销