CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

图片背景

楼主houmingyang(Hummer)2004-10-03 14:39:51 在 VC/MFC / 界面 提问

 
   
  如何他一个位图做为窗体的背景啊  
  好象是响应   WM   ERASEBKGND  
  具体如何做 问题点数:100、回复次数:9Top

1 楼laiyiling(陌生人[MVP])回复于 2004-10-03 14:59:21 得分 25

看程序段:    
  BOOL   C**View::OnEraseBkgnd(CDC*   pDC)    
  {    
        //   设置所要求背景色的刷子    
        CBrush   backBrush(RGB(255,   128,   128));   //把这里的颜色刷子换为你的位图刷子  
        //   保存旧刷子    
        CBrush*   pOldBrush   =   pDC->SelectObject(&backBrush);    
        CRect   rect;    
        pDC->GetClipBox(&rect);       //   擦除所需的区域    
        pDC->PatBlt(rect.left,   rect.top,   rect.Width(),   rect.Height(),   PATCOPY);    
        pDC->SelectObject(pOldBrush);    
        return   TRUE;    
  }Top

2 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:02:00 得分 0

//把这里的颜色刷子换为你的位图刷子  
  CBrush   brush;  
  CBitmap   bmp;  
  bmp.LoadBitmap(ID_BITMAP);//ID_BITMAP是你的位图资源  
  brush.CreatePatternBrush(&bmp);  
  bmp.DeleteObject();Top

3 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:04:52 得分 0

哦,把你的CBrush定义为窗口的类成员变量,不要在函数体里定义Top

4 楼jdzwq(酷吏巡城Ⅱ)回复于 2004-10-03 15:10:48 得分 5

导入一个位图标识为IDB_BK  
  定义两个全局变量    
  HBITMAP   bmp;  
  HBRUSH   brush;  
   
  LRESULT   CALLBACK   WndProc(HWND   hWnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  int   wmId,   wmEvent;  
  PAINTSTRUCT   ps;  
  HDC   hdc;  
  HBRUSH   org;  
  TCHAR   szHello[MAX_LOADSTRING];  
  LoadString(hInst,   IDS_HELLO,   szHello,   MAX_LOADSTRING);  
   
  switch   (message)    
  {  
  case   WM_COMMAND:  
  wmId         =   LOWORD(wParam);    
  wmEvent   =   HIWORD(wParam);    
  //   Parse   the   menu   selections:  
  switch   (wmId)  
  {  
  case   IDM_ABOUT:  
        DialogBox(hInst,   (LPCTSTR)IDD_ABOUTBOX,   hWnd,   (DLGPROC)About);  
        break;  
  case   IDM_EXIT:  
        DestroyWindow(hWnd);  
        break;  
  default:  
        return   DefWindowProc(hWnd,   message,   wParam,   lParam);  
  }  
  break;  
  case   WM_PAINT:  
  hdc   =   BeginPaint(hWnd,   &ps);  
  //   TODO:   Add   any   drawing   code   here...  
  RECT   rt;  
  GetClientRect(hWnd,   &rt);  
  DrawText(hdc,   szHello,   strlen(szHello),   &rt,   DT_CENTER);  
  EndPaint(hWnd,   &ps);  
  break;  
  case   WM_ERASEBKGND:  
  //memdc   =   CreateCompatibleDC((HDC)wParam);  
  hdc   =   (HDC)wParam;  
  org   =   (HBRUSH)SelectObject(hdc,brush);  
   
  GetClientRect(hWnd,&rt);  
  PatBlt(hdc,rt.left,rt.top,rt.right   -   rt.left,rt.bottom   -   rt.top,PATCOPY);  
   
  SelectObject(hdc,org);  
  return   0;  
  case   WM_CREATE:  
  bmp   =   LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BK));  
  brush   =   CreatePatternBrush(bmp);  
  break;  
  case   WM_DESTROY:  
  DeleteObject(brush);  
  DeleteObject(bmp);  
  PostQuitMessage(0);  
  break;  
  default:  
  return   DefWindowProc(hWnd,   message,   wParam,   lParam);  
        }  
        return   0;  
  }Top

5 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2004-10-03 15:14:37 得分 10

在OnPaint里面也可以画。  
  可以参考:  
  CPaintDC   dc(this);  
                  CRect   rect;  
                  GetClientRect(&rect);//得到窗体的大小  
                  CDC   dcMem;    
                  dcMem.CreateCompatibleDC(&dc);    
                  CBitmap   bmpBackground;  
                  bmpBackground.LoadBitmap(IDB_BITMAPBACKGROUND);//加载背景图片  
                  BITMAP   bitMap;  
                  bmpBackground.GetBitmap(&bitMap);  
                  CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);  
                  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);//画窗体  
   
  文章名称:仿制金山毒霸专杀工具界面  
   
  文章地址:http://www.vckbase.com/document/viewdoc/?id=491Top

6 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:15:50 得分 0

参考这里的,很详细  
  http://community.csdn.net/Expert/topic/3151/3151136.xml?temp=.3077509Top

7 楼nwpulipeng(☆→【★海阔天空★】)回复于 2004-10-03 19:01:39 得分 0

帮顶混分Top

8 楼Chiyer(星羽)回复于 2004-10-04 14:15:57 得分 50

Dialog背景图象  
   
  在CODEGURU看到一个MDI   CLIENT以位图为背景的例子,  
  受到启发,在DIALOG中相似地模仿了以下,效果很好。  
  主要要点是处理背景擦除消息时在DIALOG   CLIENT区域画  
  位图,代码如下:  
  BOOL   CBmpbgDlg::OnEraseBkgnd(CDC*   pDC)  
  {  
  CRect   rect;  
  GetClientRect(&rect);    
  BITMAP   bm;  
  CDC   dcMem;  
  m_pBmp->GetObject(sizeof(BITMAP),(LPVOID)&bm);  
  dcMem.CreateCompatibleDC(NULL);  
  CBitmap*   pOldBitmap   =   dcMem.SelectObject(m_pBmp);  
  for   (register   int   nX=0;nXBitBlt(nX,nY,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);  
  dcMem.SelectObject(pOldBitmap);    
  return   TRUE;Top

9 楼mynamelj(风动,帆动,仁者心动)回复于 2004-10-04 14:19:51 得分 10

//Erase   dialog   background   and   draw   bitmap   background  
  BOOL   CWwwDlg::OnEraseBkgnd(CDC*   pDC)  
  {  
  CDC   MemDC;  
  CBitmap   bitmap;  
  //From   resources   by   load   bitmap  
  if(!bitmap.LoadBitmap(IDB_BITMAP1))  
  return   FALSE;  
  MemDC.CreateCompatibleDC(pDC);  
  CBitmap*   pOldbit   =   MemDC.SelectObject(&bitmap);  
  CRect   rect;  
  GetClientRect(&rect);  
  pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);  
  MemDC.SelectObject(pOldbit);  
   
  return   TRUE;  
  }  
   
  //ON_WM_ERASEBKGND这个消息涵数ClassWizard是不提供的要手工添加进去.  
  //函数原型:afx_msg   BOOL   OnEraseBkgnd(CDC*   pDC);  
  Top

相关问题

  • 背景图片
  • 背景图片的问题!
  • 网页的背景图片???
  • 怎样实现背景图片的 Paint ?
  • 图片背景颜色问题!
  • 在那里设置背景图片|?
  • 如何在RichEdit上加背景图片??
  • 刷新背景图片的问题。
  • 怎么使图片的背景透明???
  • 怎么帮CRichEditView设背景图片???

关键词

  • dc
  • dcmem
  • bitmap
  • rect
  • 刷子
  • pdc
  • bmpbackground
  • 背景
  • selectobject
  • cbitmap

得分解答快速导航

  • 帖主:houmingyang
  • laiyiling
  • jdzwq
  • kugou123
  • Chiyer
  • mynamelj

相关链接

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

广告也精彩

反馈

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