博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC——在视图窗口加载背景图片
阅读量:4302 次
发布时间:2019-05-27

本文共 1865 字,大约阅读时间需要 6 分钟。

1.若是文档视图程序的话,在视图类的OnDraw(CDC* pDC)函数中调用pDC->TextOut()函数,就像平常输出文字一样。若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用pDC->SetBkMode(TRANSPARENT);
2.若是在对话框应用程序中,就在对话框类的OnPaint()函数中创建一个局部对象CPaintDC dc(this);然后dc.TextOut()就行。若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用dc.SetBkMode(TRANSPARENT);

 

例如:

BOOL CChildView::OnEraseBkgnd(CDC* pDC)

{
    // TODO:  在此添加消息处理程序代码和/或调用默认值
    CPaintDC dc(this); // device context for painting
    CRect   rect;
    GetClientRect(&rect);    //获取对话框长宽      
    CDC   dcBmp;             //定义并创建一个内存设备环境
    dcBmp.CreateCompatibleDC(&dc);             //创建兼容性DC
    CBitmap   bmpBackground;
    bmpBackground.LoadBitmap(IDB_BITMAP1);    //载入资源中图片
    BITMAP   m_bitmap;                         //图片变量               
    bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
    //将位图选入临时内存设备环境
    CBitmap  *pbmpOld = dcBmp.SelectObject(&bmpBackground);
    //调用函数显示图片StretchBlt显示形状可变
    dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, SRCCOPY);
    return 0;

    //return CWnd::OnEraseBkgnd(pDC);
}
 

 

这是写的第一篇博客,就不求个多么的高深的技术问题了,就分享下我现在做毕设时遇见的问题和解决方法吧,希望对大家有所帮助。

问题:如何在视图窗口加载一张小图片作为背景,且充满整个View窗口呢?

方法:步骤如下

1.先创建或者添加一张资源图片(Bitmap),格式为bmp的,ID号 我这里为IDB_BITMAP1

2.在工程的View类里面定义两个变量:

    public:

    //为了给视图类画上背景 定义以下两个变量

    CBitmap *m_bitmap;

    CBrush m_brushbackground;

3.在类的构造函数里添加如下代码:

  m_bitmap = new CBitmap;

  m_bitmap ->LoadBitmap(IDB_BITMAP1);
  m_brushbackground.CreatePatternBrush(m_bitmap);//这三行是为了给视图窗口加载背景

4.打开类向导,用VS2012的右击这个C....View类然后选择类向导,在消息里面找到WM_ERASEBKGND,在右边点击添加处理程序,然后点编辑代码,ok。

5.然后在函数体添加代码如下:

  CView::OnEraseBkgnd(pDC);

  CDC dcMem;
  CClientDC dc(this);
  HBITMAP hbit;
  dcMem.CreateCompatibleDC(&dc);
  hbit = (HBITMAP)dcMem.SelectObject(m_bitmap);
  CRect rect;
  GetClientRect(&rect);
  pDC->FillRect(rect,&m_brushbackground);//充满整个客户区
  //GetDC()->BitBlt(10,10,400,300,&dcMem,0,0,SRCCOPY);//加载到某个固定位置
  //return CView::OnEraseBkgnd(pDC);
  return 0;

切记:一定要把自动加上的return  CView::OnEraseBkgnd(pDC);注释起来 要不然显示不出来背景的哦,然后写上return 0;

好了 ,这样应该就可以了  希望对你有用!!

转载地址:http://pcmws.baihongyu.com/

你可能感兴趣的文章
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day05
查看>>
学习笔记_vnpy实战培训day06
查看>>
Python super钻石继承
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>
vnpy学习_06回测结果可视化改进
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>