UpdateLayeredWindow 与 Button,透明窗体 和 透明 button

DoubleGhost 2007-01-31 09:12:49
现在要实现的效果是,把dialog 上 的button 设置成不同透明程度的状态,用png贴图,已经在dialog上实现此功能, 但把相关代码移用到button上, UpdateLayeredWindow 返回值一直为FALSE , 请高手指点一二。在代码中只修改了相关句柄。感谢!
...全文
638 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DoubleGhost 2007-02-01
  • 打赏
  • 举报
回复
怎么给分?
DoubleGhost 2007-02-01
  • 打赏
  • 举报
回复
非常感谢!图片能够半透明显示, 但是按下button的响应消息没有了。还请指点!
DoubleGhost 2007-02-01
  • 打赏
  • 举报
回复
可以是可以了, 但是拖动窗体的时候,图片还在原地,没有随窗体一起移动。
DoubleGhost 2007-02-01
  • 打赏
  • 举报
回复
CButton * m_pButton1;
m_pButton1 = (CButton *)GetDlgItem(IDC_BUTTON3);//GetWindowRect(&rect);

long wsex = ::GetWindowLongPtr(m_pButton1->GetSafeHwnd(),GWL_EXSTYLE);
wsex|=WS_EX_TOOLWINDOW;
wsex &=~WS_EX_APPWINDOW;
::SetWindowLongPtr(m_pButton1->GetSafeHwnd(),GWL_EXSTYLE,wsex);
::SetParent(m_pButton1->GetSafeHwnd(),GetDesktopWindow()->GetSafeHwnd());


SetWindowLong(m_pButton1->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(AfxGetMainWnd()->GetSafeHwnd(),GWL_EXSTYLE)^WS_EX_LAYERED);
::SetLayeredWindowAttributes(m_pButton1->GetSafeHwnd(),RGB(0,0,0),255,LWA_ALPHA);

::SetParent(m_pButton1->GetSafeHwnd(),AfxGetMainWnd()->GetSafeHwnd());


这样还是一样的问题
Y___Y 2007-02-01
  • 打赏
  • 举报
回复
原来的句子替换为
SetWindowLong(Button1->Handle, GWL_EXSTYLE, GetWindowLong(Button1->Handle, GWL_EXSTYLE ) ^ WS_EX_LAYERED);
即可
DoubleGhost 2007-02-01
  • 打赏
  • 举报
回复
非常感谢!图片能够半透明显示, 但是按下button的响应消息没有了。还请指点!
Y___Y 2007-02-01
  • 打赏
  • 举报
回复
回复 | 收藏此页 | 专题 | 公告 | 管理 | 保存 | 关闭窗口
点 管理 给分后,输密码,点 给分 按钮
Y___Y 2007-01-31
  • 打赏
  • 举报
回复
Panel控件半透明,关键是控件父窗体要设置为桌面
void __fastcall TForm1::FormActivate(TObject *Sender)
{
long wsex = ::GetWindowLongPtr(Handle, GWL_EXSTYLE );
wsex |= WS_EX_TOOLWINDOW ;
wsex &= ~WS_EX_APPWINDOW;
::SetWindowLongPtr(Panel1->Handle, GWL_EXSTYLE, wsex );
::SetParent(Panel1->Handle ,GetDesktopWindow());
SetWindowLong(Panel1->Handle, GWL_EXSTYLE, GetWindowLong(Panel1->Handle, GWL_EXSTYLE ) ^ WS_EX_LAYERED ^ WS_EX_TRANSPARENT );
::SetLayeredWindowAttributes(Panel1->Handle, RGB( 0, 0, 0 ), 255 - 100, LWA_ALPHA );
Panel1->Refresh() ; // 一定要呼叫,否则失败
::SetParent(Panel1->Handle,Form1->Handle);
Panel1->Repaint() ; // 一定要呼叫,否则失败

}

15,979

社区成员

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

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