社区
界面
帖子详情
求助,不寻常的透明按钮,有难度!
laserman
2005-03-16 11:29:53
MFC自带的按钮是不能实现透明功能的,要实现透明,通常的解决方法是派生一个自绘按钮,在按钮中保存和背景一样的图片,按钮每次刷新的时候将图片作为背景,这样看上去的效果和透明是一样的,但这种方法只能实现静态背景图片,如果背景图片是gif之类的动态图片,显示上就会出问题。我的想法是做一个真正意义上的透明按钮,这样在后台背景变化的时候也不会有问题,请问如何实现?
...全文
1032
28
打赏
收藏
求助,不寻常的透明按钮,有难度!
MFC自带的按钮是不能实现透明功能的,要实现透明,通常的解决方法是派生一个自绘按钮,在按钮中保存和背景一样的图片,按钮每次刷新的时候将图片作为背景,这样看上去的效果和透明是一样的,但这种方法只能实现静态背景图片,如果背景图片是gif之类的动态图片,显示上就会出问题。我的想法是做一个真正意义上的透明按钮,这样在后台背景变化的时候也不会有问题,请问如何实现?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
菜牛
2005-03-17
打赏
举报
回复
派生CButton,在OnEraseBkgnd()中return TRUE;在DrawItem()中绘图,确实是完全透明的,但是动态还不行。
laserman
2005-03-17
打赏
举报
回复
谢谢ipgk(loboho),
不过静态的可以,动态的还是不行,不知道还有什么方法没有。
难道只有设置按钮的区域吗?那可太麻烦了。
jerry
2005-03-17
打赏
举报
回复
设置按钮的区域. 让按钮只包含那些需显示的区域,
hushuangyan74
2005-03-17
打赏
举报
回复
大家讨论这么激烈,我就不说了。。。。
laserman
2005-03-16
打赏
举报
回复
这样不行.
其实我的意思就是做一个按钮,给按钮设定图标后,按钮的样子看上去就和图标一样,图标以外的范围显示的就是父窗口的背景,也不显示长方形的边框,但实际上还是能响应按钮消息.
效果就和将WEB页面设为桌面背景后,快捷方式"我的电脑"的效果差不多.
我想应该是按钮控件,不知道有没有什么别的方法.
老夏Max
2005-03-16
打赏
举报
回复
这个确实比较困难!动画的一直没有解决!当初有一个滚动字幕的透明和你这个问题一样,到现在还没有解决。关注!
ipgk
2005-03-16
打赏
举报
回复
你重载OnEraseBkgnd,直接return TURE。
不知你为什么要让按钮透明,这样不是很难看?你要透明还是半透明?
laserman
2005-03-16
打赏
举报
回复
请问如何实现?我派生的按钮默认都有小方框的,无法融入到背景中
ipgk
2005-03-16
打赏
举报
回复
你派生的按钮就可以实现透明,不用保存背景再画。
菜牛
2005-03-16
打赏
举报
回复
ipgk(loboho):
他这个按钮已经是继承类的了,就不需要SubclassWindow()了。
ipgk
2005-03-16
打赏
举报
回复
测试过,不一定要Create后再subclasswindow,只要Create时指定owndraw就可以,我说错了。不过透明是可以实现的。例子发了给你。
laserman
2005-03-16
打赏
举报
回复
楼上的,有例子吗?请发给我,laserman_x@yahoo.com.cn,谢谢。
ipgk
2005-03-16
打赏
举报
回复
凡是用这种方法创建的按钮都有背景
___________________
你这么肯定,我也没意见。反正动态创建的按钮我也是做过的,透明也是可以实现的,也许你的意思我真的不明白吧。不过我要说,只是m_testBtn.Create(。。是肯定不行的,一定要Create后再subclasswindow到m_testBtn。
laserman
2005-03-16
打赏
举报
回复
自定义一个按钮类,使用SetLayeredWindowAttributes会不会把在上面画的图案也变得透明?
我的想法是背景完全透明,按钮上的图标,文字完全不透明,这样行吗?
吹泡泡的小猫
2005-03-16
打赏
举报
回复
WS_EX_LAYERED
Windows 2000 or later: Creates a layered window. Note that this cannot be used for child windows. Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
按钮一般都是子窗口
I_Love_CPP
2005-03-16
打赏
举报
回复
这样的按钮就是真正意义上的透明按钮!
I_Love_CPP
2005-03-16
打赏
举报
回复
回复人: I_Love_CPP(我愛C++) ( ) 信誉:141 2005-03-16 13:52:00 得分: 0
既然透明/半透明的窗口都能实现,按钮当然也能实现透明/半透明。
自定义一个按钮类,使用
SetLayeredWindowAttributes
laserman
2005-03-16
打赏
举报
回复
执行上是没有问题的,可能我的表达不够清楚。
凡是用这种方法创建的按钮都有背景,通常将按钮的背景设成和按钮parent背景上同样位置的内容,这样看上去的效果就是一个透明按钮,这样的情况对于parent背景不变是没有问题的,但是如果parent背景是gif运动图片或者avi电影的运动画面,一眼就能看出毛病.
我就是想解决这个问题,达到真正意义上的透明按钮.
laserman
2005-03-16
打赏
举报
回复
// MyVCTestDlg.h : 头文件
//原有的东西忽略
// CMyVCTestDlg 对话框
class CMyVCTestDlg : public CDialog
{
//原有的东西忽略
public:
//CExplorer1为微软COM组件,名称为Microsoft Web浏览器,类是自动生成的
//界面上放了一个这样的控件
CExplorer1 m_IE;
//m_testBtn为自定义按钮,定义为变量
CMyTestButton m_testBtn;
}
// MyVCTestDlg.cpp : 实现文件
//原有东西忽略
void CMyVCTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//DDX控件绑定,m_IE在界面上放置了控件
DDX_Control(pDX, IDC_EXPLORER1, m_IE);
}
// CMyVCTestDlg 消息处理程序
//初始化对话框
BOOL CMyVCTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//上边的东西都是自动生成的,下面的为添加的
//调用Create创建按钮并显示,
m_testBtn.Create("DDDD", WS_CHILD|WS_VISIBLE, CRect(0,0,100,100), &m_IE, 201);
//IE窗口转到csdn,作为背景
COleVariant mmm;
m_IE.Navigate("www.csdn.net", &mmm, &mmm, &mmm, &mmm);
//修改完毕
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
//这下应该不会引起歧义了
//为什么m_testBtn不用DDX_Control的原因是我不知道如何将m_testBtn的parent设为m_IE
//很长时间没用VC了,记忆难免有错,请各位多多指教,3ks
ipgk
2005-03-16
打赏
举报
回复
那就Create后再SubclassWindow,你在PreSubclassWindow下个断点,看有没执行到?
加载更多回复(8)
各路大牛的C语言编程建议和技巧!
我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以来这些基于许多经验的观点一直积累在我的头脑中。因此希望这些观点能帮助你们,了解...
大牛们的C语言编程建议和技巧!
点击上方“大鱼机器人”,选择“置顶/星标公众号”福利干货,第一时间送达!我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随...
各路大牛的C语言编程建议和技巧,看完感触颇深
我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以来这些基于许多经验的观点一直积累在我的头脑中。因此希望这些观点能帮助你们,了解...
情商的研究
情商EQ认识与提高 情商 (情绪、意志、性格、行为习惯组成的商数) 情商(Emotional Quotient)通常是指情绪商数,简称EQ,主要是指人在情绪...从最简单的层次上下定义,提高情商是把不能控制情绪的部分变为可以...
程序员的思维修炼:开发认知潜能的九堂课
我们自身往往增加了程序设计的
难度
。随着软件行业的不断发展,我们似乎失去了作为一名软件开发人员所必需的最基础、最重要的技能。 不过好在,我们此时此地就能改正这个错误。本书将告诉你如何去做。 ...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章