请教大家,我要在CFormView视图中加入背景图片,现在的问题是图片已经可以添加了,但是,我的CFormView中有一些其他的控件,所以,
当把CFormView拖动到比较小的时候,视图就会出现滚动条,然后拖动滚动条,结果视图里面的背景图片就出现了许多条纹,视图变的很模糊,
非常的难看。请教大家如何解决。
   我是在OnPaint中添加的背景图片:void CTest_FormView_BGView::OnPaint() 
{
CPaintDC dcPaint(this); // device context for painting

// TODO: Add your message handler code here
CRect r;
GetClientRect(&r);
// Paint to a memory device context to help
// eliminate screen flicker.

CXTPBufferDC memDC(dcPaint, r);
memDC.FillSolidRect(r,GetSysColor(COLOR_WINDOW));

OnPrepareDC(&memDC);
OnDraw(&memDC);       // Do not call CFormView::OnPaint() for painting messages
}
void CTest_FormView_BGView::OnDraw(CDC* pDC) 
{
// TODO: Add your specialized code here and/or call the base class

CBitmap bmpStartPage;
if(!bmpStartPage.LoadBitmap(IDB_BITMAP1))//resource id
{
return;
}
CDC dcCompatible;
if (!dcCompatible.CreateCompatibleDC(pDC))
{
return;
}

CBitmap* pOld = dcCompatible.SelectObject(&bmpStartPage);
BITMAP bmInfo;
if(bmpStartPage.GetObject(sizeof(bmInfo),&bmInfo) != 0)
{
pDC->BitBlt(0,0,bmInfo.bmWidth,bmInfo.bmHeight,&dcCompatible,0,0,SRCCOPY);
}

dcCompatible.SelectObject(pOld);
}

解决方案 »

  1.   

    在OnEraseBkgnd()中绘制背景图。
      

  2.   

    楼主试试看,让图片随着视图大小的变化而变化,就是在pDC- >BitBlt(0,0,bmInfo.bmWidth,bmInfo.bmHeight,&dcCompatible,0,0,SRCCOPY); 这句话中修改绘制图片位置的坐标。或者,楼主试试这个方法:在OnSize()事件中添加Invalidate();然后在OnEraseBkgnd()事件中最后return TRUE;
      

  3.   

    to Mackz:
    采用了“在OnEraseBkgnd()中绘制背景图”,基本采用的原来的代码,只是换成了在OnEraseBkgnd()中添加图片,由滚动条产生的问题解决了,但是又出现了
    新的问题,就是当拖动CFormView的的大小超过图片大小的时候,在视图的边缘又出现了条纹和模糊的界面。请教如何解决这个问题。
      

  4.   

    to jerry4711  OnEraseBkgnd()已经return TRUE了,在OnSize()中也添加过Invalidate(FALSE)了,但是问题是当拖动视图的滚动条的时候,程序自动就调用了
    Invalidate(TRUE).
      

  5.   

    在OnEraseBkgnd()中贴图之前先用一种颜色填充整个客户区,
    然后再把土贴上
      

  6.   

    to xianglitian
    你的方法我试过了,当拖动CFormView的的大小超过图片大小的时候,边缘仍然模糊!