hur.cn - 华软网

 热门搜索

透明对话框

  作者:未知    来源:网络    更新时间:2011/8/11
对话框上就一个按钮,怎么才能使对话框透明,而且按钮正常显示,就像按钮直接显示在屏幕上一样?或者有没有其他实现方法,就是加入控件上画了一幅图,然后能够直接显示在屏幕上,没有后面的对话框,多谢了。
---华软 网友回答---
不要用按钮,直接在按钮位置贴一张图片代替。
---华软网友回复---
处理OnEraseBkgnd
---华软网友回复---
引用 2 楼 mhwer99 的回复:
处理OnEraseBkgnd


能再详细点吗?
---华软网友回复---
http://topic.csdn.net/u/20100405/13/97f377fc-615a-4732-9199-f3bbdbef028d.html
---华软网友回复---
这是不可能的,控件只能跟窗口一起透明化,如果想达到你要的效果,只能用图片贴上去,使用UpdateLayeredWindow 来取代窗口的OnPaint函数进行窗口的刷新。
---华软网友回复---
把对话框做成和按钮一样大的无边框窗口不就行了
还要什么按钮
---华软网友回复---
//实现对话框半透明
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),
GWL_EXSTYLE)^0x80000);//为窗口加入GWL_EXSTYLE扩展
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));//加载动态链接库
if (hInst)
{
//定义函数指针,用于获取系统调用函数SetLayeredWindowAttributes
typedef BOOL (WINAPI * MYFUNC)(HWND, COLORREF, BYTE, DWORD); 
MYFUNC fun = NULL;

//取得SetLayeredWindowAttributes指针,其原型为:
COLORREF clr(RGB(0, 0, 0));  //将进行透明处理的颜色
fun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); 
if (fun)
fun(this->GetSafeHwnd(), clr, 220, LWA_ALPHA);//改一下相关参数应该就可以了
FreeLibrary(hInst);//释放动态链接库
}
---华软网友回复---
上面,把 LWA_ALPHA改成LWA_COLORKEY ,clr设置成你对话框的背景色应该能满足要求了
---华软网友回复---
可以
方法:

建立一个对话框
动态建立几个按钮;主要是确定按钮位置


在对话框初始化的地方这样处理
CRgn r1,r2,r3,rn; //建立区域
r1.CreateRectRgn(x11,y11,x12,y12); //按钮1的区域
r2.CreateRectRgn(x21,y21,x22,y22); //按钮2的区域
........


r1.CombineRgn(&r1,&r2,3);  //1和2区合并
r1.CombineRgn(&r1,&r3,3);  //再合并3区
......


SetWindowRgn(r1,true);

好了,这就是你要的结果了

其实还有很多方法可以达到你的想法,这是比较简单的一种
---华软网友回复---
引用 6 楼 xianglitian 的回复:
把对话框做成和按钮一样大的无边框窗口不就行了
还要什么按钮


我也是这么想的。
---华软网友回复---
9楼方法不错,如果是不规则按钮需要用region
colorkey也可以      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。