如何使窗口背景透明

bofrobber 2008-10-15 10:02:22
我要创建一个窗口,希望他背景透明,因为该窗口后面是一个变化的,而我要在窗口上画一些线的操作,
请问如何实现背景透明呢
...全文
359 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2008-10-18
  • 打赏
  • 举报
回复
郁闷 搞了一个晚上终于弄出来了。效果不是很好,等以后再改吧。
先传给你吧。
到这个地址http://download.csdn.net/source/697792去下载,我设定了资源分为0;

效果图如下:(效果不是很好,因为那个透明窗体弹出来后,直接覆盖在了原来窗口的上面,但是里面的按钮和那个从(0,0)画到(100,100)的线还是能看到的;另外还有一个边框没有去掉,需要程序里面调整一下)。


等有时间了再慢慢改吧。

同时要感谢http://www.vckbase.net/document/viewdoc/?id=1345的作者和楼上的各位。
程序就是在他的代码上改的。
jaeson83 2008-10-16
  • 打赏
  • 举报
回复
在对话框的OnInitDialog()函数中添加如下代码:

SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary(L"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,2); //255表示完全透明,你可以改成0~255之间的数实现部分透明
FreeLibrary(hInst);
}
palmax 2008-10-16
  • 打赏
  • 举报
回复
alpha像素混合
Tinary3v0 2008-10-16
  • 打赏
  • 举报
回复
//加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("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,128,2);
FreeLibrary(hInst);
}

这个在对话框上实现了半透明,和2楼的基本上一个代码。

如果不想窗口上画的线也透明那就使用png图片来实现半透明效果吧,
到这个网址:http://www.vckbase.com/document/viewdoc/?id=1745
yc_8301 2008-10-16
  • 打赏
  • 举报
回复
友情up
bofrobber 2008-10-15
  • 打赏
  • 举报
回复
可是我不要窗口全透明
我希望还能在窗口上画线
study_live 2008-10-15
  • 打赏
  • 举报
回复

HINSTANCE hInst;

const LWA_COLORKEY = 0x00001;
const LWA_ALPHA = 0x00002;

typedef BOOL (WINAPI *FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
FSetLayeredWindowAttributes SetLayeredWindowAttributes;

hInst = LoadLibrary("User32.dll");

SetLayeredWindowAttributes = (FSetLayeredWindowAttributes)
GetProcAddress(hInst,"SetLayeredWindowAttributes");

SetLayeredWindowAttributes(GetSafeHwnd(),RGB(0,0,0),150,LWA_ALPHA);

FreeLibrary(hInst);

dandycheung 2008-10-15
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/dialog/transparent-control.aspx

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧