在线求助:自定义控件tabctrl的动画效果问题

lovett777 2010-12-10 12:46:45
自己封装了一个tabctrl,通过自绘,做成了一个一个的矩形块,类似三个口字排开这样子的。口口口
要求点击到其中一个tab页(“口”字)的时候,口字的下面(紧挨着口的最下)多出一个填充的三角形箭头,表示当前选中了这一个。目前我都已经实现,但是有个问题不知道怎么解决。

我在onpaint里面的处理大致如下:我创建了一个兼容位图,在上面把相关的tabctrl画好以后,通过TransparentBlt画出来,因为我创建的这个矩形位图我是通过黑色填充的,所以我TransparentBlt的时候,把黑色的部分全部透明显示。预期的效果也达到了,但是让我点击tabctrl上其他的页面(“口”)时,对应的“口”字下面也可以显示三角形,但是原先选中的那个“口”字下面的三角形消失不掉,我想了想,是因为TransparentBlt这种方式造成的,原先的地方没有进行重绘,所以依然存在,但是我又想不到什么好的解决办法,因为控件显示在对话框上面,对话框的背景又是有图案的位图,不是纯色的,所以有点卡壳的感觉。还请大家不惜赐教。万分感谢!!!
...全文
214 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
qs107107107 2011-09-17
  • 打赏
  • 举报
回复
LZ,可否吧你写得发一份给我,谢谢啦,刚学,TAB不知道怎么用,283920244@qq.com
dlyy 2011-04-07
  • 打赏
  • 举报
回复
最近也在郁闷tab的动画效果
lovett777 2010-12-13
  • 打赏
  • 举报
回复
多谢各位。问题圆满解决。-_-
向立天 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lovett777 的回复:]
引用 16 楼 xianglitian 的回复:
引用 13 楼 lovett777 的回复:
不好意思,请问怎么样可以把对话框上tabctrl所占的区域复制过来,我现在获取不到,求代码。。

这个方法很多啊
如果你父窗口就是纯颜色的话只要告诉tabctrl它用到什么颜色就可以了
如果有图片那父窗口用什么图片tabctrl也贴什么图片就行啊

恩,我在tabctrl的OnErase……
[/Quote]
没有这种API
我的意思是说你的背景是图片形式的
那你在tabctrl里直接把对话框里贴的图片也贴一遍不就可以了
对好坐标就行
lovett777 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 visualeleven 的回复:]
你可以用贴图的方式啊,不用自己去画
[/Quote]

什么意思,请问能不能说详细一点啊?
Eleven 2010-12-11
  • 打赏
  • 举报
回复
你可以用贴图的方式啊,不用自己去画
lovett777 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xianglitian 的回复:]
引用 13 楼 lovett777 的回复:
不好意思,请问怎么样可以把对话框上tabctrl所占的区域复制过来,我现在获取不到,求代码。。

这个方法很多啊
如果你父窗口就是纯颜色的话只要告诉tabctrl它用到什么颜色就可以了
如果有图片那父窗口用什么图片tabctrl也贴什么图片就行啊
[/Quote]
恩,我在tabctrl的OnEraseBkgnd中把控件所占的矩形区域的bmp图片进行重绘,问题就解决了。唯一美中不足的就是闪烁有点厉害。

还有请问下版主,有没有直接获取控件在对话框区域的背景bmp内容的API?

lovett777 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 j8daxue 的回复:]
因为我创建的这个矩形位图我是通过黑色填充的
直接用GetSysColor(COLOR_3DFACE)填充不就行了?对这些黑色填充后透明没意义啊。
[/Quote]

不好意思,背景是图片形式的,不是纯色的。
向立天 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lovett777 的回复:]
不好意思,请问怎么样可以把对话框上tabctrl所占的区域复制过来,我现在获取不到,求代码。。
[/Quote]
这个方法很多啊
如果你父窗口就是纯颜色的话只要告诉tabctrl它用到什么颜色就可以了
如果有图片那父窗口用什么图片tabctrl也贴什么图片就行啊
j8daxue 2010-12-10
  • 打赏
  • 举报
回复
因为我创建的这个矩形位图我是通过黑色填充的
直接用GetSysColor(COLOR_3DFACE)填充不就行了?对这些黑色填充后透明没意义啊。
lovett777 2010-12-10
  • 打赏
  • 举报
回复
不好意思,请问怎么样可以把对话框上tabctrl所占的区域复制过来,我现在获取不到,求代码。。
向立天 2010-12-10
  • 打赏
  • 举报
回复
看我2楼回复
lovett777 2010-12-10
  • 打赏
  • 举报
回复
因为tabctrl的显示问题,我动态create的时候,创建的大小是比你看到的要大的,多出的区域是透明显示的,但是如你所说,如果paint之前重新画背景,就会出现上面的问题。
lovett777 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xianglitian 的回复:]
你不是说用了TransparentBlt么
我以为你做了镂空处理
这个本来也不会消失掉
绘制的时候先画背景把之前画过的东西都盖掉
然后重新画
[/Quote]
先对版主表示感谢,这个方法我试过的,确实三角形可以正常更新消失,但是周边的区域背景显示是个问题,看效果图:
向立天 2010-12-10
  • 打赏
  • 举报
回复
你不是说用了TransparentBlt么
我以为你做了镂空处理
这个本来也不会消失掉
绘制的时候先画背景把之前画过的东西都盖掉
然后重新画
lovett777 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xianglitian 的回复:]
做的不错
三角的部分不用镂空
需要的时候就画上
不需要的时候不画就是了
[/Quote]

什么镂空? 现在就是这样的,当前被选中的就会在onpaint里面画一下,没有选中的就不画,但是就是不会消失掉。
lovett777 2010-12-10
  • 打赏
  • 举报
回复
谢谢帮我顶!! 再发个有问题的效果图。点击其他的原先的三角形区域还依然存在的问题
向立天 2010-12-10
  • 打赏
  • 举报
回复
做的不错
三角的部分不用镂空
需要的时候就画上
不需要的时候不画就是了
lovett777 2010-12-10
  • 打赏
  • 举报
回复


呵呵,不好意思,表达能力很差。发个图吧,看起来就一目了然了。
lovett777 2010-12-10
  • 打赏
  • 举报
回复
加载更多回复(1)

15,979

社区成员

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

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