设置半透明对话框

原创 2007年10月10日 23:44:00

要实现半透明的窗体,首先需要窗体具有0x80000值的扩展风格,然后调用User32动态库中的SetLayeredWindowAttributes 函数来设置半透明窗体,在VC中SetLayeredWindowAttributes 函数并没有被直接封装,需要手动从User32动态库中到入。

实现代码入下: 

//设置窗口扩展风格
 SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|0x80000);

定义一个与SetLayeredWindowAttributes 函数具有相同函数原型的函数指针,
 typedef BOOL (WINAPI *FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);

 FSetLayeredWindowAttributes SetLayeredWindowAttributes ;

 HINSTANCE hInst = LoadLibrary("User32.DLL");//到入动态库;

 SetLayeredWindowAttributes = (FSetLayeredWindowAttributes)GetProcAddress(hInst,"SetLayeredWindowAttributes");//调用DLL中的函数

 if (SetLayeredWindowAttributes)
  SetLayeredWindowAttributes(GetSafeHwnd(),RGB(0,0,0),128,2);
 FreeLibrary(hInst); 

函数原型:
LONG GetWindowLong( HWND hWnd,int nIndex )

函数功能描述:用这个函数能够获得指定窗口的信息

参数:
hWnd:指定窗口的句柄
nIndex:需要获得的信息的类型
     值            功能

nIndex取值如下:
GWL_EXSTYLE    得到扩展的窗口风格
GWL_STYLE      得到窗口风格
GWL_WNDPROC    得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
GWL_HINSTANCE  得到应用程序运行实例的句柄
GWL_HWNDPARENT 得到父窗口的句柄
GWL_ID         得到窗口的标识符
GWL_USERDATA   得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位
               的值)

当hWnd标识一个对话框时可以使用下面的值
Value Action
DWL_DLGPROC   得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值
DWL_USER      得到额外的应用程序私有信息,如一些句柄和指针等

返回值:
成功时,返回一个请求的32位的值
失败时,返回0,可以使用GetLastError来取得错误信息

示例:
long nStyle = ::GetWindowLong(hWnd, GWL_STYLE);   // hWnd是一个编辑框的句柄
if(nStyle & ES_PASSWORD)
{
    AfxMessageBox("这是一个密码域");
}

函数:LONG SetWindowLong( HWND hWnd,

int nIndex,

LONG dwNewLong

);

这个函数根据nIndex的取值不同,可以实现不同的功能.

其中nInde可以取:

GWL_EXSTYLE: 设置窗口扩展风格,即CreateWindowEx的DWORD wExStyle 参数

GWL_STYLE: 设置窗口风格,即CreateWindow的DWORD dwStyle参数

GWL_WNDPROC: 设置窗口的处理函数,即RegisterClass的WNDCLASSEX的WNDPROC lpfnWndProc成员

GWL_HINSTANCE: 设置窗口所属的应用程序句柄,即RegisterClass的WNDCLASSEX的HINSTANCE hInstance成员

GWL_ID 设置窗口的ID(对于控件,就是控件ID)

GWL_USERDATA: 设置窗口的用户自定义数据

DWL_DLGPROC: 设置对话框处理函数

DWL_MSGRESULT: 设置对话框消息处理的结果值

DWL_USER: 设置扩展区域数据

函数:GetSafeHwnd() 用来获取当前句柄;

函数:GetProcAddress()用来调用DLL中的函数;

FARPROC GetProcAddress(
  HMODULE
hModule,    // handle to DLL module
  LPCSTR lpProcName   // name of function
);

如何使用wxWidgets跨平台界面库来编写一个对话框窗口?

如题: 这是一个窗口类,调用方法是: ++++++ wxString fontname = new_tab_->GetFontName(); //wxT("System"); Dl...
  • u013317006
  • u013317006
  • 2014年01月10日 11:17
  • 949

Android设置控件的透明度(半透明效果)

1. 前言有些需求会改变布局颜色透明度,比如根据滑动距离,改变title颜色,设置控件如View,Button等的透明度,有3种方法。2.使用方法(1)java代码实现:text = (TextVie...
  • dfskhgalshgkajghljgh
  • dfskhgalshgkajghljgh
  • 2016年09月07日 11:39
  • 14574

LinearLayout半透明效果

透明效果有很多中实现方式,可以代码实现,也可以直接在布局文件中实现。简单点的就是直接给控件设透明背景: android:background="#88323232" 上面是常见的灰色半透明效果,当你设...
  • lovelease
  • lovelease
  • 2017年04月13日 11:00
  • 310

轻松实现部分背景半透明的呈现效果

实现一个简单的呈现/解散动画效果,当呈现时,呈现的主要内容和背景要明显区分,背景呈现一个半透明遮罩效果,透过背景可以看到下层 View Controller 的内容...
  • kmyhy
  • kmyhy
  • 2016年11月24日 17:16
  • 3177

定制半透明的JPanel

最近想模仿酷狗做个练习,路上困难重重啊。第一个困难是需要那些图标,于是就自学PS。再就是需要渐变色的进度条,于是就费了好大的功夫,重写了BasicProgressBarUI的paintDetermin...
  • Mr_Pang
  • Mr_Pang
  • 2015年08月26日 14:53
  • 2531

Android初学习 - 组件半透明和透明的效果

1. 半透明 透明 颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255(00 到 ff)。 对于 alpha,00 表示完全透明,ff 表示完全不透明...
  • cnmilan
  • cnmilan
  • 2015年07月16日 21:01
  • 5759

Android中半透明Activity效果另法

在做项目时,常需要用到对话框之类的效果,然而对话框不容易写,所以就想写个半透明的Activity来代替对话框效果,这样的好处至少有三个: 一:布局容易 二:各种控件容易控制 三:代码简练:不至于将控制...
  • sunalongl
  • sunalongl
  • 2014年03月05日 14:53
  • 3318

MFC几种给对话框添加背景图的方法

1,目标 总结几种给MFC对话框添加背景图片的方法。 2,实现 方式一:(适用于多种格式)用CImage类可以加载多种格式的图片,在OnPaint中Draw即可。 ...
  • xiaoxiaomao410
  • xiaoxiaomao410
  • 2014年09月18日 16:59
  • 1320

Android 设置透明、半透明等效果

设置透明效果 大概有三种1、用android系统的透明效果 Java代码 android:background="@android:color/transparent" 例如 设置按钮 Java代...
  • qq_26981913
  • qq_26981913
  • 2016年10月18日 10:00
  • 2067

CSS实现半透明背景 兼容IE6

网站中也有很多地方都需要半透明背景,这样可以使网页有一种晶莹剔透的感觉,给了用户一种良好的视觉效果。   其实是一个透明度为90%的纯色背景,代码如下: #header{ filt...
  • tgghfbflishuai
  • tgghfbflishuai
  • 2013年09月14日 17:54
  • 1571
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设置半透明对话框
举报原因:
原因补充:

(最多只允许输入30个字)