社区
界面
帖子详情
一个窗口透明相关的问题.
善古
2010-09-02 05:30:10
VC6.0 基于对话框程序:
因为我想模仿QQ调色板的透明滑动块,滑动时改变所有打开的窗口透明度.
所以我创建了一个滑动块,添加了NM_RELEASDCAPTURE消息处理函数...
接下来我该怎么做呢..
...全文
56
4
打赏
收藏
一个窗口透明相关的问题.
VC6.0 基于对话框程序: 因为我想模仿QQ调色板的透明滑动块,滑动时改变所有打开的窗口透明度. 所以我创建了一个滑动块,添加了NM_RELEASDCAPTURE消息处理函数... 接下来我该怎么做呢..
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
善古
2010-09-02
打赏
举报
回复
非常感谢两位的拔刀相助,
特别地感谢l_xiangxi的回答,你的武艺果然有效!!
l_xiangxi
2010-09-02
打赏
举报
回复
首先这种写法是让对话框透明时用到的,因为要使窗体拥有透明效果,则窗口必须有WS_EX_LAYERED扩展属性,而一般情况下窗口是不具有WS_EX_LAYERED属性的,所以要加上这个属性,WS_EX_LAYERED = 0x80000,所以才有了这样的写法。
但其实这种写法是错误的,为什么这样说呢,因为^运算符的含义是按位异或的意思,与0x80000异或就是第19位取反,其他位不变,也就是说当窗口没有WS_EX_LAYERED属性时给窗口加上WS_EX_LAYERED属性,而当窗口具有WS_EX_LAYERED属性时去掉WS_EX_LAYERED属性;显然这不是我们刚才提到的要使窗口透明就必须给窗口加上WS_EX_LAYERED属性的初衷。所以这种写法是错误的。这种写法来源于老的SDK程序,老的SDK中没有定义这个属性,所以使用^0x80000加上了这个属性。
正确的写法应写成:
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,\
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)|0x80000);//直接加上WS_EX_LAYERED属性
或者判断一下,当不具有WS_EX_LAYERED属性时再这样操作:
DWORD dwExStyle=GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE);
if((dwExStyle&0x80000)!=0x80000)
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,dwExStyle^0x80000);
另外如果你在VS2003以上版本的MFC里时可以不用这么麻烦,直接用下面两行代码就可以实现窗口透明的效果了:
ModifyStyleEx(0, WS_EX_LAYERED);//修改窗口属性为WS_EX_LAYERED
SetLayeredWindowAttributes(0, 192, LWA_ALPHA); //实现透明效果
[Quote=引用 1 楼 jankyhu 的回复:]
用下面的代码设置窗口透明度:
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));
if(hInst)
{
……
[/Quote]
善古
2010-09-02
打赏
举报
回复
试了,这个网上都是这么说的,切实可以对单个窗口设置透明度,
但是同时对多个窗口同时设置透明度我是这样做的:
向所有处于打开状态的窗口发送一个自定义消息,每个窗口响应后就是你这段代码..
但是出现:滑动一下滑块,显示透明,再滑动一下,就正常画面,再滑动一下又透明,如此循环,
我的百分比都是设置正确的..不知道是什么原因..不知道网上这段代码对刷新有没有什么影响...[Quote=引用 1 楼 jankyhu 的回复:]
用下面的代码设置窗口透明度:
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));
if(hInst)
{
……
[/Quote]
WebIllusory
2010-09-02
打赏
举报
回复
用下面的代码设置窗口透明度:
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,(255*98)/100,2); //透明度
FreeLibrary(hInst);
}
半
透明
窗口
中显示标准控件(控件与文字不
透明
)的实现方案
通过层叠
窗口
可以简单实现半
透明
与不规则形状
窗口
的效果,但在其上显示标准控件(控件与文字不
透明
)却是件比较有挑战的事情,这里会给出
一个
可行的解决方案。同时实现了一些可重用的
窗口
类,有
相关
需求时可以进行...
[精仿]QQ2013局域网通讯(10.30更新版-带最新版界面库)
10.GDI+界面重绘,处理消息机制,3种移动模式和拉伸是否启用只需要设置
一个
属性的事就可以解决。 11.界面渐变闪现和闪退:不再像平凡的突然出现,采用API渐变机制,渐渐出现和消失,win7系统下还有动态缩小至任务的...
Google Android SDK开发范例大全(PDF高清完整版3)(4-3)
2.2 建立第
一个
Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...
Google Android SDK开发范例大全(PDF完整版4)(4-4)
2.2 建立第
一个
Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...
Google Android SDK开发范例大全(PDF高清完整版1)(4-1)
2.2 建立第
一个
Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章