VC实现对话框客户区透明!
来源:互联网 发布:爱淘宝流氓软件 编辑:程序博客网 时间:2024/05/17 07:55
这2个函数很是神奇,能让窗口客户区透明,真正的透明,像被美工刀抠掉一样,可以穿过窗口点击后面的图标或者按钮。
BOOL CALLBACK EnumChildFunc(HWND hwnd, LPARAM lParam)
{
CRgn *pRgn = (CRgn*)lParam;
CRect rcChild;
::GetWindowRect(hwnd, rcChild);
CRgn rgnChild;
CRgn rgnCopy;
rgnCopy.CreateRectRgn(0, 0, 1, 1);
rgnCopy.CopyRgn(pRgn);
rgnChild.CreateRectRgn(rcChild.left, rcChild.top,
rcChild.right, rcChild.bottom);
pRgn->CombineRgn(&rgnCopy, &rgnChild, RGN_OR);
return TRUE;
}
int SetBackTransparent(CWnd *pWnd, BOOL bClientOnly = TRUE)
{
CRgn rgn;
if(bClientOnly)
{
CRgn rgnWindow, rgnClient;
CRect rcWindow, rcClient, rcRgn;
pWnd->GetWindowRect(rcWindow);
pWnd->GetClientRect(rcClient);
pWnd->ClientToScreen(rcClient);
rgnWindow.CreateRectRgn(rcWindow.left, rcWindow.top,
rcWindow.right, rcWindow.bottom);
rgnClient.CreateRectRgn(rcClient.left, rcClient.top,
rcClient.right, rcClient.bottom);
rgn.CreateRectRgn(0, 0, 1, 1);
rgn.CombineRgn(&rgnWindow, &rgnClient, RGN_DIFF);
} else {
rgn.CreateRectRgn(0, 0, 0, 0);
}
::EnumChildWindows(pWnd->GetSafeHwnd(), (WNDENUMPROC)EnumChildFunc,(LPARAM)&rgn);
return pWnd->SetWindowRgn(rgn, TRUE);
}
调用办法:
在CYourDialog::OnInitDialog 里加上 //也就是MFC的×××::OnInitDialog函数(×××代表具体的工程名)
SetBackTransparent(this);
如果要连非客户区都透明,用
SetBackTransparent(this, FALSE);
以上两个函数一定要写在OnInitDialog()之前,不然会报错;这两个函数在MFC的默认包含文件里已经声明过了,调用前无需再声明,此处应该只是重写了这两个函数。
示例代码:https://pan.baidu.com/s/1qYbP77A
- VC实现对话框客户区透明!
- VC窗口客户区透明
- VC实现对话框的透明
- 【VC++】 实现对话框透明显示
- 对话框客户区实现拖动
- VC++ 对话框透明效果
- VC 对话框背景透明
- vc透明对话框
- VC++ 实现整个对话框透明的效果SetLayeredWindowAttributes
- VC实现透明图的闪屏对话框动画
- VC 轻松实现非客户区按钮
- VC++实现透明窗体
- VC实现透明窗口
- 为VC++应用程序对话框添加透明位图
- 为VC++应用程序对话框添加透明位图
- 为VC++应用程序对话框添加透明位图
- VC++应用程序对话框添加透明位图
- 为VC++应用程序对话框添加透明位图
- [LeetCode] 561. Array Partition I
- Apache 2.4 + Tomcat7集群配置
- dmesg
- 在507干活的第3天(上)
- 1. Git安装与配置
- VC实现对话框客户区透明!
- 119. Pascal's Triangle II
- gitlab数据迁移后修改http链接
- selenium显示等待与隐士等待的区别
- ICMP:Internet 控制报文协议和Ping程序
- shiro无密码登陆
- IOS利用Xcode同时编译多包(测试环境地址、生产环境地址)
- Spring Data Redis
- SVN打基线