CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

cformview,添加控件后,改变控件背景图的显示问题

楼主look01(^-^)2006-03-14 01:28:18 在 VC/MFC / 界面 提问

单文档程序,继承cformview,我添加了listctrl控件。我想在listctrl控件中显示一幅图片作为背景图,但图片只显示一下就消失了,原因不明。代码放在ondraw()中  
  void   CGmMnuView::OnDraw(CDC*   pDC)  
  {  
  CGmMnuDoc*   pDoc   =   GetDocument();    
  ASSERT_VALID(pDoc);    
  CDC   *pmylistDC   =   m_mylist.GetDC();//取listctrl控件dc  
  IPicture   *pPic;    
  IStream   *pStm;    
   
  CFileStatus   fstatus;    
  CFile   file;    
  LONG   cb;    
  //下面是显示jpeg图片的代码,代码来自网上的。(作者应该测试过)  
  if   (file.Open("./backgroud.jpg",CFile::modeRead)&&file.GetStatus("./backgroud.jpg",    
  fstatus)&&    
  ((cb   =   fstatus.m_size)   !=   -1))    
  {    
  HGLOBAL   hGlobal   =   GlobalAlloc(GMEM_MOVEABLE,   cb);    
  LPVOID   pvData   =   NULL;    
  if   (hGlobal   !=   NULL)    
  {    
  if   ((pvData   =   GlobalLock(hGlobal))   !=   NULL)    
  {    
  file.ReadHuge(pvData,   cb);    
  GlobalUnlock(hGlobal);    
  CreateStreamOnHGlobal(hGlobal,   TRUE,   &pStm);    
   
  if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*    
  )&pPic)))    
  {    
  OLE_XSIZE_HIMETRIC   hmWidth;    
  OLE_YSIZE_HIMETRIC   hmHeight;    
   
  pPic->get_Width(&hmWidth);    
  pPic->get_Height(&hmHeight);    
   
  double   fX,fY;    
  fX   =   (double)pmylistDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pmylistDC->GetDeviceCaps(HORZSIZE)*100.0);    
  fY   =   (double)pmylistDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pmylistDC->GetDeviceCaps(VERTSIZE)*100.0);    
  if(FAILED(pPic->Render(*pmylistDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))    
  AfxMessageBox("Failed   To   Render   The   picture!");    
  pPic->Release();    
  }    
  else    
  AfxMessageBox("Error   Loading   Picture   From   Stream!");    
  }    
  }    
  }    
  else    
  {  
          AfxMessageBox("Can't   Open   Image   File!");    
   
  }  
  }  
   
  说明:  
  我如果将控件的dc指针pmylistDC替换成view的dc指针pdc则不会有任何问题,但为什么在控件中显示后马上就消失呢,请各位高手不吝赐教,谢过. 问题点数:20、回复次数:6Top

1 楼Mackz(在相互)回复于 2006-03-14 02:21:28 得分 15

CListCtrl::SetBkImageTop

2 楼look01(^-^)回复于 2006-03-14 12:53:51 得分 0

我要显示的jpg的不是bmp图象啊SetBkImage不能显示:(Top

3 楼orbit(走了走了)回复于 2006-03-14 13:12:10 得分 5

如果你想在listctrl中画背景,就应该处理listctrl的onpaint或onerasebkgnd,而不是在view中Top

4 楼Mackz(在相互)回复于 2006-03-14 15:22:58 得分 0

没问题,JPG、GIF都能显示。别忘了CoInitialize/CoUninitializeTop

5 楼look01(^-^)回复于 2006-03-14 19:32:38 得分 0

太好了,我成功了,谢谢Mackz(在相互)高手指点,不过现在有个不足之处就是当我改变窗体大小时,背景图片的大小并没有随着改变,有没有好办法实现呢?谢谢Top

6 楼look01(^-^)回复于 2006-03-15 12:21:43 得分 0

等待高手解答Top

相关问题

  • 怎么添加Tree Control控件的背景图片?
  • 如何给VB的SSTab和DataGrid控件添加背景色
  • 如何为控件添加背景图片?
  • Applet添加背景图,为什么背景遮住了控件?如何处理?
  • 怎么用纯代码实现给treeview控件添加背景图片???????????????(不要别的控件)
  • 各位老大: 如何在CFormView中动态的添加一组CStatic控件?
  • 为什么我在修改对话框的背景色之后,添加的EDIT控件背景色也变了?
  • (急)怎么改变Slider控件中的背景颜色或者添加背景图片?
  • placeholder控件能否添加html控件??
  • 在对话框中,用Picture 控件添加背景图片,和在OnPaint()中用LoadImage()添加背景有什么不同?

关键词

  • 控件
  • 代码
  • null
  • pmylistdc
  • ppic
  • hglobal
  • fstatus
  • hmheight
  • hmwidth
  • getdevicecaps

得分解答快速导航

  • 帖主:look01
  • Mackz
  • orbit

相关链接

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

广告也精彩

反馈

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