CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何将Dialog上的控件透明?

楼主snaill(com.chinaos.snaill)2002-07-29 15:10:06 在 VC/MFC / 基础类 提问

我在Dialog上设置了背景图,可是标签栏,单选框控件的背景都是灰色的,如何能他们透明,就像是写在背景图上的一样?  
  已经设置了他们的ws_ex_transperant样式,不过没有效果。 问题点数:50、回复次数:16Top

1 楼snaill(com.chinaos.snaill)回复于 2002-07-29 17:48:14 得分 0

没人知道吗?Top

2 楼wwwllg(野蛮人)回复于 2002-07-29 18:07:28 得分 10

HBRUSH   CLineSelDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  if(nCtlColor   ==   CTLCOLOR_STATIC)//其它控件一样  
  {  
  pDC->SetTextColor(RGB(255,0,0));  
  pDC->SetBkColor(RGB(255,255,255));//此处你可以改成与你的对话框相同的背景色就可以了,我是这样做的,郊果很好。  
  }  
  //   TODO:   Change   any   attributes   of   the   DC   here  
   
  //   TODO:   Return   a   different   brush   if   the   default   is   not   desired  
  return   hbr;  
  }  
  Top

3 楼yy23rock(云云)回复于 2002-07-29 18:09:59 得分 5

很简单呀!  
  如:STATIC:  
  自己从CSTATIC类里派生一个CMYSTATIC类,在WM—PAINT消息映射函数里用用DRAWTEXT()函数来“画”它就行了!  
  以下代码共参考:  
  ....  
   
  CRect   rc;  
  GetWindowRect(rc);  
  ScreenToClient(rc);  
  pDC->SetTextColoor(RGB(0,0,0));  
  pDC->SetModel(1);  
  pDC->DrawText("THIS   IS   TRANSPARENT   STATIC!",DT_CENTER);  
  return   true;  
  ...  
  }Top

4 楼yy23rock(云云)回复于 2002-07-29 18:12:16 得分 5

在OnCtlColor()里做的话在9X里没有问题,但是在2000下不起作用的,而且也只能改变背景颜色,不能实现透明背景,最好还是在WM—PAINT里自己“画”它!Top

5 楼siphonelee(sifone)回复于 2002-07-29 18:16:10 得分 0

upTop

6 楼anni(维生素C)回复于 2002-07-29 18:18:51 得分 0

upTop

7 楼snaill(com.chinaos.snaill)回复于 2002-07-29 18:23:20 得分 0

透明的单选框如何实现呢?Top

8 楼howtotell(从何谈起)回复于 2002-07-30 00:03:54 得分 10

加在OnInitDialog中整个窗体都透明了.win   2000下绝对可以.  
  SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,  
  GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);  
  HINSTANCE   hInst   =   LoadLibrary("User32.DLL");    
  if(hInst)    
  {    
  typedef   BOOL   (WINAPI   *MYFUNC)(HWND,COLORREF,BYTE,DWORD);    
  MYFUNC   fun   =   NULL;  
  //取得SetLayeredWindowAttributes函数指针    
  fun=(MYFUNC)GetProcAddress(hInst,   "SetLayeredWindowAttributes");  
  if(fun)fun(this->GetSafeHwnd(),0,230,2);    
  FreeLibrary(hInst);    
  }Top

9 楼snaill(com.chinaos.snaill)回复于 2002-07-30 10:42:45 得分 0

满复杂的,我的程序要支持98的Top

10 楼masx(一条人)回复于 2002-07-30 13:53:07 得分 0

upTop

11 楼tigermount(智者爱山,仁者爱水)回复于 2002-07-31 12:54:20 得分 5

OnCtlColor()函数可以实现!Top

12 楼Dreamer7901()回复于 2002-07-31 14:39:15 得分 5

重载控件的自绘函数!Top

13 楼snaill(com.chinaos.snaill)回复于 2002-08-01 13:02:58 得分 0

OnCtlColor可以实现背景色,如何能让背景透明?  
  自绘函数如何实现?有具体的吗?  
  我copy了父窗体Button位置,可是只显示出灰色。(父窗体是贴有背景图的Dialog)为什么?Top

14 楼chenosaur(紫色海王星)回复于 2002-08-04 23:13:41 得分 10

响应WM_CTLCOLOR消息,如下所示:  
   
  如果需要全部的control都透明:  
  HBRUSH   CYourDialog::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
          pDC->SetBkMode(TRANSPARENT);  
          return   (HBRUSH)GetStockObject(NULL_BRUSH);  
  }  
   
   
  如果需要指定的control透明:  
  HBRUSH   CYourDialog::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
          if(pWnd->GetDlgCtrlID()   ==   ID_YOURCTRL)   //   ID_YOURCTRL是要透明的control的ID  
          {  
                  pDC->SetBkMode(TRANSPARENT);  
                  return   (HBRUSH)GetStockObject(NULL_BRUSH);  
          }  
          else  
          {  
                  return   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
          }  
  }  
  Top

15 楼wq_quake(Paladin 象风一样的游侠)回复于 2002-10-09 23:43:08 得分 0

试都没试过就在那瞎写,骗谁呢!  
  写一段像样的代码出。别在那瞎嚷嚷!讨厌。Top

相关问题

  • 如何让控件边界透明阿???
  • 如何让label控件透明
  • 如何实现控件透明
  • 如何製作透明控件?
  • 控件透明
  • --> --> --> 透明控件 ?
  • 透明控件
  • 如何让透明窗口上的控件不透明啊?
  • 如何让透明窗口上的控件不透明啊?
  • MFC:怎样使dialog上的控件对dialog透明

关键词

  • 控件
  • 函数
  • null
  • onctlcolor
  • 透明
  • pdc
  • nctlcolor
  • hbrush
  • 背景
  • pwnd

得分解答快速导航

  • 帖主:snaill
  • wwwllg
  • yy23rock
  • yy23rock
  • howtotell
  • tigermount
  • Dreamer7901
  • chenosaur

相关链接

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

广告也精彩

反馈

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