CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

高手帮忙:关于透明按钮的实现!

楼主ccnuxjg()2003-12-02 16:47:04 在 VC/MFC / 基础类 提问

我自己仿照CButtonST做了一个按钮类,可以实现位图按钮透明。  
  其透明原理是:得到按钮的父窗口,拷贝出按钮所在位置的位图,然后在绘制按钮时显示出来,代码大致如下:  
  CClientDC   clDC(GetParent());  
  CRect   rect;  
  CRect   rect1;  
   
  GetClientRect(rect);  
   
  GetWindowRect(rect1);  
  GetParent()->ScreenToClient(rect1);  
   
  if   (m_dcBk.m_hDC   ==   NULL)  
  {  
  m_dcBk.CreateCompatibleDC(&clDC);  
  m_bmpBk.CreateCompatibleBitmap(&clDC,   rect.Width(),   rect.Height());  
  m_pbmpOldBk   =   m_dcBk.SelectObject(&m_bmpBk);  
  m_dcBk.BitBlt(0,   0,   rect.Width(),   rect.Height(),   &clDC,   rect1.left,   rect1.top,   SRCCOPY);  
  }   //   if  
   
  pDC->BitBlt(0,   0,   rect.Width(),   rect.Height(),   &m_dcBk,   0,   0,   SRCCOPY);  
   
   
  这样就有一个问题,当我的按钮处于弹出窗口的最下端,而且弹出的窗口的最下端刚好被Windows的任务栏给遮住的时候,按钮的透明部分就不再透明,而是会显示Windows任务栏中遮住按钮的那部分。  
   
  不知各位是怎么解决这个问题的。 问题点数:200、回复次数:9Top

1 楼zhucde(【風間苍月】★<==>★【虚拟闲人】)回复于 2003-12-02 17:02:59 得分 30

在CButtonST里是用void   DrawTransparent(BOOL   bRepaint   =   FALSE);来实现透明的,  
  我看了一下它的函数,  
  好像最后加了一个  
  if(bRepaint)  
        Invalidate();  
  用来刷新.  
  你有没有在你的程序中加上类似于刷新的代码?  
  用来重绘你的按钮?  
  像你所说的那种情况在被遮挡后不刷新一下经常会遇到的.Top

2 楼flyelf(空谷清音)回复于 2003-12-02 17:07:28 得分 30

用了一个WH_GETMESSAGE的钩子,如果是父窗口的wm_paint消息,则让按钮重画Top

3 楼ljzcom()回复于 2003-12-02 17:10:20 得分 30

自己重画Top

4 楼yintongshun(左岸思雨)回复于 2003-12-02 17:37:15 得分 30

CButtonST  
  http://www.vckbase.com/document/viewdoc.asp?id=518  
  http://www.vckbase.com/document/viewdoc.asp?id=519  
  http://www.vckbase.com/document/viewdoc.asp?id=520  
  http://www.vckbase.com/document/viewdoc.asp?id=521  
  http://www.vckbase.com/document/viewdoc.asp?id=517  
  http://www.vckbase.com/document/viewdoc.asp?id=517Top

5 楼ccnuxjg()回复于 2003-12-02 18:10:16 得分 0

to     zhucde(【风间苍月】)   :问题不在没有Invalidet();  
  to     yintongshun(踏雪有痕):CButtonST一样的有这个BugTop

6 楼flyccloud(飞云)回复于 2003-12-02 18:14:25 得分 30

ccnuxjg说得对,CButtonST一样不好使,呵呵Top

7 楼canjian(奋斗,探求,不达目的誓不罢休!)回复于 2003-12-02 18:25:57 得分 30

学习Top

8 楼shines(郭子)回复于 2003-12-02 19:43:46 得分 20

在父窗体的OnPaint()里,通知所有的子窗体重绘,试试Top

9 楼ccnuxjg()回复于 2003-12-03 11:03:25 得分 0

父窗口最小化之后再最大化也有这种问题。Top

相关问题

  • 怎样实现单选按钮透明?
  • 如何实现透明按钮?
  • 50求透明按钮的实现方法
  • 求透明背景的按钮的实现方法(可显示背景图片)
  • 如何实现透明度可调节的按钮、文本框等控件
  • 如何做透明按钮?
  • 如何制作透明按钮
  • 关于透明按钮的问题???
  • 怎样实现IE按钮
  • 实现半透明效果

关键词

  • document
  • asp
  • 按钮
  • dcbk
  • viewdoc
  • 透明
  • rect
  • vckbase
  • cbuttonst
  • 刷新

得分解答快速导航

  • 帖主:ccnuxjg
  • zhucde
  • flyelf
  • ljzcom
  • yintongshun
  • flyccloud
  • canjian
  • shines

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo