我继承了EditView类 为了实现文本编辑 
于是我想为编辑框添加一个背景 
在MyView类响应了WM_PRINT消息函数  加入如下代码 
void CABCView::OnPaint() 
{
CPaintDC dc(this); // device context for painting CDC C_dc;
C_dc.CreateCompatibleDC(&dc);
CBitmap Cbackgroundmap;
Cbackgroundmap.LoadBitmap(IDB_BITMAP1);
BITMAP cbitmap;
Cbackgroundmap.GetBitmap(&cbitmap);
C_dc.SelectObject(&Cbackgroundmap); RECT m_rect;
GetClientRect(&m_rect);
// CString s;
// s.Format("rect.x=%d,rect.y=%d",m_rect.right-m_rect.left,m_rect.bottom-m_rect.top );
// MessageBox(s); dc.StretchBlt(
0,
0,
 m_rect.right-m_rect.left ,m_rect.bottom-m_rect.top, &C_dc,
0,
0,
cbitmap.bmWidth, cbitmap.bmHeight,
SRCCOPY 
);
// TODO: Add your message handler code here
// Do not call CEditView::OnPaint() for painting messages
}
但文本编辑到有滚动条的时候 拖动滚动条 背景发生重绘 原来的背景就变质了  
可不可以让背景不随滚动条的滚动而发生重绘  就是静态背景 该怎么做 

解决方案 »

  1.   

    写在OnEraseBkgnd函数里,或者重载OnEraseBkgnd使其直接返回
      

  2.   

    virtual COLORREF SetBkColor(COLORREF crColor);
    放在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)这个消息函数里
      

  3.   

    case WM_CTLCOLOREDIT:
    BRUSH hbrush=0;
    if(!hbrush)
    {
    HBITMAP hbitmap=LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP));
    hbrush=CreatePatternBrush(hbitmap);
    }
    SetBkMode((HDC)wParam,TRANSPARENT);
    return hbrush;
    break;SDK的写法,不过对MFC应该同样能用
      

  4.   

    SetBkColor是设置背景颜色,SetTextColor是设置文本颜色