我在一个对话框中重载了OnEraseBkgnd(CDC* pDC)函数,具体代码如下:BOOL CGiftDlg::OnEraseBkgnd(CDC* pDC) 
{

   HBITMAP   bitmap,pold;
   bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"xx.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
   ASSERT(bitmap);
   CDC   MemDC;
   BITMAP bm;
   GetObject(bitmap, sizeof(BITMAP), (LPBYTE)&bm);
   CRect rc,rcbt;
   GetClientRect(&rc);
   CSize bmsize(bm.bmWidth,bm.bmHeight);
   MemDC.CreateCompatibleDC(pDC);
   pold=(HBITMAP)MemDC.SelectObject(bitmap);
   rcbt.left=rc.left+(rc.Width()-bmsize.cx)/2;
   rcbt.right=rcbt.left+bmsize.cx;
   rcbt.top=rc.top+(rc.Height()-bmsize.cy)/2;
   rcbt.bottom=rcbt.top+bmsize.cy;
   pDC->StretchBlt(rcbt.left,rcbt.top,rcbt.Width(),rcbt.Height(),&MemDC,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
   MemDC.SelectObject(pold);
   MemDC.DeleteDC();
   return TRUE;
}
问题是弹出窗口的时候位图显示不完全,右边少一部分.最大话窗口没问题,但返回初始大小的时候位图不会在适应窗口大小.请教高手什么问题啊??

解决方案 »

  1.   

    关注某些情况下移动窗口或窗口大小改变不会调用OnEraseBkgnd解决办法不知道了,等待高手解决.帮你顶
      

  2.   

    没有调用基类的OnEraseBKgnd,这种方式不好,基类的该函数还有作别的工作,是否可考虑换一种方式。
      

  3.   

    在WM_CTLCOLOR消息函数里出来,这里直接返回TRUE
      

  4.   

    HBRUSH CGiftDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //设置透明背景模式
    pDC->SetBkMode(TRANSPARENT);
    //设置背景刷子为空
    return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
    }