CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

一直没能找到答案的经典问题:静态控件Static 怎么才能真正的透明显示?

楼主halleyw(自己动手)2005-12-20 17:07:54 在 VC/MFC / 界面 提问

就象MSN中,当别人输入消息时,对话框的下面就显示XX在输入消息  
   
  但是那个Static又不改变主对话框的背景图片  
   
  我怎么设置Static的属性都不行。总是出现灰色的static。  
   
  怎么才能让自己的static完全透明的只显示其中的文字而不遮盖背景图片??? 问题点数:100、回复次数:7Top

1 楼happyparrot(快乐鹦鹉)回复于 2005-12-20 17:26:02 得分 20

显示文字时,用SetBkMode(TRANSPARENT);  
  可以响应对话框的OnCtlColor事件,判断控件是否为静态框,是则设置背景模式为透明Top

2 楼halleyw(自己动手)回复于 2005-12-20 17:28:52 得分 0

能否说的详细点?  
   
  有没有具体的例子或者代码段?  
  Top

3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-20 17:38:19 得分 20

把对话框的背景复制一份(因为对话框本身的DC包含有CStatic的内容,需要用内存DC/内存位图),在CStatic的WM_ERASEBKGND消息响应时复制到CStatic的DC,返回TRUE;  
   
  如果你对效果要求很苛刻,只有这个方法Top

4 楼Atomictry(天影)回复于 2005-12-20 17:41:12 得分 20

添加OnCtlColor事件:  
  if(nCtlColor   ==   CTLCOLOR_STATIC)  
  {  
  pDC->SetBkMode   (TRANSPARENT);  
  return   (HBRUSH)   GetStockObject   (HOLLOW_BRUSH);;  
  } Top

5 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-20 17:47:12 得分 20

BEGIN_MESSAGE_MAP(CMyStatic,   CStatic)  
  //{{AFX_MSG_MAP(CMyStatic)  
   
   
  ON_WM_ERASEBKGND()  
   
  ON_WM_CTLCOLOR_REFLECT()  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
  BOOL   CMyHyperLink::OnEraseBkgnd(CDC*   pDC)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  if   (m_pParentDC   &&   m_pParentDC->GetSafeHdc())  
  {  
  CRect   rc;  
  GetWindowRect(rc);  
  GetParent()->ScreenToClient(rc);  
  pDC->BitBlt(0,   0,   rc.Width(),rc.Height(),   m_pParentDC,rc.left,rc.top,SRCCOPY);  
  return   TRUE;  
  }  
   
  return   FALSE;  
  }  
  BRUSH   CMyStatic::CtlColor(CDC*   pDC,   UINT   nCtlColor)    
  {  
  UNUSED_ALWAYS(nCtlColor);  
  pDC->SetBkMode(TRANSPARENT);  
  return   ((HBRUSH)GetStockObject(HOLLOW_BRUSH));  
  }  
  .....  
  用法  
   
  CDC*   pDC   =   GetDC();  
  m_MemDC.CreateCompatibleDC(pDC);  
  m_Bitmap.CreateCompatibleBitmap(pDC,   rc.Width(),   rc.Height());  
  m_MemDC.SelectObject(&m_Bitmap);//内存位图不能选出来  
  ReleaseDC(pDC);  
                    m_cStatic.m_pParentDC   =   &m_MemDC;  
  Top

6 楼teli_eurydice(哭泣的仙人掌。。。。)回复于 2005-12-20 17:47:51 得分 20

不填充背景不就可以了阿,另外显示文字时,用SetBkMode(TRANSPARENT);  
  Top

7 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-20 18:06:04 得分 0

补充一点,m_cStatic.SetWindowText改变文本之后需要调用Invalidate(TRUE);Top

相关问题

  • Static 控件透明问题
  • 关于静态文本控件(Static Text)
  • 请问如何将静态控件背景设为透明
  • 请问如何改变静态文本控件Static的颜色?
  • 请问怎样设置st_name(静态文本控件)的backcolor为透明色?
  • 控件透明
  • --> --> --> 透明控件 ?
  • 透明控件
  • 如何设置静态文本控件透明? 如vfp,vb里的,透明后可将两个控件重叠实现立体效果
  • 怎么设置静态文本控件上面的文本的字体大小???(就是那个STATIC控件)

关键词

  • 消息
  • 对话框
  • cmystatic
  • pparentdc
  • cstatic
  • nctlcolor
  • setbkmode
  • ctlcolor
  • pdc
  • 显示

得分解答快速导航

  • 帖主:halleyw
  • happyparrot
  • goodboyws
  • Atomictry
  • goodboyws
  • teli_eurydice

相关链接

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

广告也精彩

反馈

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